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

时间:2018-04-15 00:03:15

标签: python pip

  1. 使用get-pip.py安装pip正在破坏。它说

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

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

  3. 安装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
    

1 个答案:

答案 0 :(得分:10)

<强>安装

使用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