今天使用Docker build 一个Python项目时,提示错误。查询相关资料,记录如下。
项目使用requirements.txt文件,放置环境依赖,但是使用会导致pip.req提示失败。尝试修改后成功。
结论:避免在requirements.txt文件中放置任何依赖项链接。而是使用下面提到的方法。您可以直接将依赖项链接放入setup.py文件中。

源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#from pip.req import parse_requirements
from pip._internal.req import parse_requirements

install_reqs = parse_requirements('requirements.txt', session=False)
install_requires = [str(ir.req) for ir in install_reqs]

setup(name='chumpy',
version=get_version(),
packages = ['chumpy'],
author='Matthew Loper',
author_email='matt.loper@gmail.com',
url='https://github.com/mattloper/chumpy',
description='chumpy',
license='MIT',
install_requires=install_requires
)

requirements.txt

1
2
3
numpy>=1.8.1
scipy>=0.13.0
six>=1.11.0

提示错误信息

1
AttributeError: 'ParsedRequirement' object has no attribute 'req'

解决

1
2
3
4
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
2
3
4
try: # for pip >= 10
from pip._internal.req import parse_requirements
except ImportError: # for pip <= 9.0.3
from pip.req import parse_requirements

修改依然失败。

最终,直接修改setup()才能使用。
避免在requirements.txt文件中放置任何依赖项链接。而是使用下面提到的方法。您可以直接将依赖项链接放入setup.py文件中。

1
2
3
4
5
6
7
8
9
10
11
setup(name='chumpy',
version=get_version(),
packages = ['chumpy'],
author='Matthew Loper',
author_email='matt.loper@gmail.com',
url='https://github.com/mattloper/chumpy',
description='chumpy',
license='MIT',
# install_requires=install_requires,
install_requires=['numpy>=1.8.1', 'scipy>=0.13.0', 'six>=1.11.0'],
)

参考文章

stackoverflow

install quantopian时出现No module named pip.req的解决办法

https://www.programcreek.com/python/example/58693/pip.req.parse_requirements