【问题标题】:pip 10 no module named pip.reqpip 10 没有名为 pip.req 的模块
【发布时间】:2018-04-15 00:03:14
【问题描述】:
  1. 使用 get-pip.py 安装 pip 失败。它说

    Requirement already up-to-date: pip in /tmp/tmpvF6RoH/pip.zip (10.0.0)

  2. 没有名为 pip.req 的模块

在安装 pip 模块时

Traceback (most recent call last):
  File "setup.py", line 5, in <module>
    from pip.req import parse_requirements
ImportError: No module named pip.req

【问题讨论】:

    标签: python pip


    【解决方案1】:

    安装

    对于使用 get-pip.py 进行安装,请使用 --force-reinstall 标志:

    $ python get-pip.py --force-reinstall
    

    显然这是直到他们解决问题https://github.com/pypa/pip/issues/5220


    pip 内部命令的推荐替代方案

    避免将任何依赖链接放在您的requirements.txt 文件中。而是使用下面提到的方法。您可以直接将依赖链接放在setup.py 文件中。一些著名的包也以列表的形式维护setup.py文件内部的需求,并且没有任何requirements.txt文件

    with open('requirements.txt') as f:
        install_requires = f.read().strip().split('\n')
    
    setup(
        name='app_name',
        .
        .
        install_requires=install_requires,
        dependency_links=[
            'https://github.com/frappe/python-pdfkit.git#egg=pdfkit'
        ],
        cmdclass = \
        {
            'clean': CleanCommand
        }
    )
    

    从 pip 导入 (不良做法 - 请勿使用,因为它可能随时中断!

    强烈建议您避免这样做,因为如 pip 用户指南中所述,这些方法不是线程安全的。另外,由于它们是 pip 的私有方法,它们可能会在没有任何事先通知的情况下随时更改它,从而破坏您的包安装!

    如果你有任何来自 pip 的导入,例如:

    from pip.req import parse_requirements
    

    它会坏掉的。由于这些现在已移至 pip._internal ,因此:

    from pip._internal.req import parse_requirements
    

    然而,为了向后兼容,您必须使用类似这样的东西:

    try: # for pip >= 10
        from pip._internal.req import parse_requirements
    except ImportError: # for pip <= 9.0.3
        from pip.req import parse_requirements
    

    重要

    现在说使用内部 pip 函数不是一个好习惯,由于这里提到的多种原因:https://pip.pypa.io/en/latest/user_guide/#using-pip-from-your-program

    【讨论】:

    • 您知道是否有不使用内部 api 的推荐替代方案?
    • @JoeJ 我已经相应地修改了答案,以包括推荐的替代方案。
    • 这是对github.com/pypa/pip/issues/7645等问题的合理建议
    猜你喜欢
    • 2014-10-01
    • 2018-12-12
    • 2020-01-30
    • 2021-06-08
    • 2013-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-30
    相关资源
    最近更新 更多