没有名为pip.req的模块

74 投票
6 回答
82680 浏览
提问于 2025-04-18 16:28

我在安装tweepy的时候遇到了一个错误,提示找不到pip.req。我已经安装了pip,但不知道为什么还是找不到pip.req。我在网上查了很多资料,发现有些人提到过zap(?)和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

6 个回答

9

与其导入这个函数,还可能遇到更多问题,不如把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这个调用中的session参数已经被去掉了。

12

我遇到了一个和这个很相似的问题,使用的是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
55

我把pip降级到了9.0.3版本,结果一切都正常了。降级pip的命令是

python -m pip install pip==9.0.3
158

最近出现这个问题是因为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

这样就可以解决了。

37

看起来如果你有以下这段代码,它应该可以正常工作:

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("#")]

接下来,按照以下步骤操作:

  1. 创建一个名为 pip/ 的文件夹
  2. 在这个文件夹里添加一个空文件 pip/__init__.py
  3. 再添加一个文件 pip/req.py
  4. 把上面的代码放进 pip/req.py 文件里:
  5. 修改 setup.py 文件中的一行代码

    reqs = install_reqs 这一行改成你需要的内容

撰写回答