没有名为 pip.req 的模块

Posted

技术标签:

【中文标题】没有名为 pip.req 的模块【英文标题】:No module named pip.req 【发布时间】:2014-10-01 07:14:17 【问题描述】:

我正在安装 tweepy,但我遇到了关于 pip.req 的错误。我已经安装了 pip,但由于某种原因仍然找不到 pip.req。我在网上做了很多研究,我能找到的最多的是一些关于 zapo (?) 和 python 2.7 之间不兼容的问题,导致其他一些用户出现同样的错误。不过,关于如何解决问题的讨论尚不清楚。谢谢!

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

【问题讨论】:

看起来他们想删除它。我不完全同意这个决定,但这是从 pip 10 中删除该模块的 PR。github.com/pypa/pip/pull/4700 【参考方案1】:

最近发生这种情况是因为 pip 10 发生了变化。

修复很简单。你可能有类似的东西:

from pip.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

应该可以的。

【讨论】:

他们为什么不添加向后兼容性。许多软件包将因此错误而安装失败。 :( 似乎他们对这个可用感到遗憾,因为他们将它移到了 _internals 的私​​有命名空间。但是,是的,把它拿走并不好。 @kororo,我认为您将日期读作“2016 年 4 月”而不是 2018 年 4 月 16 日(当年)。 pip 开发者从未打算出售 API,而只是作为一种工具。 作为一个令人震惊的少数人,他们没有太多的时间和精力来制定一个惊人的过渡计划。让我大吃一惊的是,庞大的 Python 社区对一小群 pip 开发人员所做的贡献如此之少。【参考方案2】:

我降级到 pip 到 9.0.3 并且事情对我有用。 降级 pip 的命令是

python -m pip install pip==9.0.3

【讨论】:

谢谢。很遗憾降级 pip,但这是唯一对我有用的事情。【参考方案3】:

如果你有这个代码,它看起来会起作用:

def parse_requirements(filename):
    """ load requirements from a pip requirements file """
    lineiter = (line.strip() for line in open(filename))
    return [line for line in lineiter if line and not line.startswith("#")]

这样做:

    创建目录pip/ 添加一个空文件pip/__init__.py 添加文件pip/req.py 将上面的代码放入pip/req.py:

    修改setup.py中的行

    reqs = install_reqs

【讨论】:

^ 谢谢!所以我能理解——为什么会这样?为什么我必须自己添加这段代码,上面的代码是做什么的? tweepy 的作者写了一个setup.pyscript 引用了不存在的文件和目录。我告诉你作者可能是什么意思。 (很可能,这些文件在他的硬盘上,但没有添加到 git 存储库中。它发生了。)此代码读取 pip requirements.txt 文件并提取所需的模块进行安装。然后setup.py 实际安装文件。 @hughdbrown 我应该修改哪一行以及修改什么? @AliIssa 我建议将函数放在 setup.py 文件中,而不是导入它。请参阅下面的解决方案。 setup.py 文件中添加行reqs=install_reqs 的位置并不完全清楚,所以我遇到了同样的问题。【参考方案4】:

不要导入函数并可能遇到更多问题,而是将 setup.py 的内容替换为以下内容:

#!/usr/bin/env python
#from distutils.core import setup
import re, uuid
from setuptools import setup, find_packages

def parse_requirements(filename):
    """ load requirements from a pip requirements file """
    lineiter = (line.strip() for line in open(filename))
    return [line for line in lineiter if line and not line.startswith("#")]


VERSIONFILE = "tweepy/__init__.py"
ver_file = open(VERSIONFILE, "rt").read()
VSRE = r"^__version__ = ['\"]([^'\"]*)['\"]"
mo = re.search(VSRE, ver_file, re.M)

if mo:
    version = mo.group(1)
else:
    raise RuntimeError("Unable to find version string in %s." % (VERSIONFILE,))

install_reqs = parse_requirements('requirements.txt')
reqs = install_reqs

setup(name="tweepy",
      version=version,
      description="Twitter library for python",
      license="MIT",
      author="Joshua Roesslein",
      author_email="tweepy@googlegroups.com",
      url="http://github.com/tweepy/tweepy",
      packages=find_packages(exclude=['tests']),
      install_requires=reqs,
      keywords="twitter library",
      classifiers=[
          'Development Status :: 4 - Beta',
          'Topic :: Software Development :: Libraries',
          'License :: OSI Approved :: MIT License',
          'Operating System :: OS Independent',
          'Programming Language :: Python',
          'Programming Language :: Python :: 2',
          'Programming Language :: Python :: 2.6',
          'Programming Language :: Python :: 2.7',
          'Programming Language :: Python :: 3',
          'Programming Language :: Python :: 3.3',
          'Programming Language :: Python :: 3.4',
      ],
      zip_safe=True)

请注意会话参数已从 parse_requirements 调用中删除。

【讨论】:

【参考方案5】:

我在 Python 3.7 + pip 18.0 上遇到了非常相似的问题:

Traceback (most recent call last):
  File "/usr/local/bin/pip-compile", line 7, in <module>
    from piptools.scripts.compile import cli
  File "/usr/local/lib/python3.7/site-packages/piptools/scripts/compile.py", line 11, in <module>
    from pip.req import InstallRequirement, parse_requirements
ModuleNotFoundError: No module named 'pip.req'

解决方案是将 pip-tools 从 1.10 升级到 2.0:

pip install -U pip-tools

【讨论】:

我今天在使用 pip-tools 时遇到了同样的问题(还有 Humberto!) from pip._internal.req import parse_requirements【参考方案6】:

我遇到了同样的问题。要安装 pip,您需要在获得 easy_install 后遵循此 https://pypi.python.org/pypi/setuptools 我先安装了 pip,然后运行以下命令。

sudo easy_install pip
sudo python setup.py install

简单。

【讨论】:

以上是关于没有名为 pip.req 的模块的主要内容,如果未能解决你的问题,请参考以下文章

没有名为“硒”的模块

macOS 上的“ModuleNotFoundError:没有名为 'dbus' 的模块”

AWS 无法导入模块“app”:没有名为 Pymysql 的模块

ImportError:没有名为 pynotify 的模块。安装模块时

ModuleNotFoundError:没有名为“推理”的模块

为啥 ImportError:没有名为 lightgbm 的模块