requirements.txt depending on python version

我尝试使用6将 python2包移植到 python3(不是我自己的) ,这样它就可以兼容两者。但是,现在 python3 stdlib 中包含了 Requments.txt 中列出的一个包,并且 pypi 版本在 python3中不能工作,所以我想有条件地排除它。在 setup.py 中这样做很简单,我可以这样做:

if sys.version_info[0] == 2:
requirements += py2_requirements
else:
requirements += py3_requirements

但是我也希望 requments.txt 能够反映出正确的列表。我在 pip 文件里找不到任何相关信息。那么有人知道怎么做吗,或者这是否可能呢?

62120 次浏览

您可以创建多个需求文件,将这些公共包放在一个公共文件中,并使用 -r file_path将它们包含在另一个 pip 需求文件中

requirements/
base.txt
python2.txt
python3.txt

Python2.txt:

-r base.txt
Django==1.4 #python2 only packages

Python3.txt:

-r base.txt
Django==1.5 #python3 only packages

Pip install-r 需求/python2.txt

你可以使用 环境标记requirements.txt中实现这一点,因为 pip 6.0:

SomeProject==5.4; python_version < '2.7'
SomeProject; sys_platform == 'win32'

Setuptools 也通过在 setup.py中声明额外的要求来支持它:

setup(
...
install_requires=[
'six',
'humanize',
],
extras_require={
':python_version == "2.7"': [
'ipaddress',
],
},
)

参见 需求说明书。 以及相应 Python 命令的字符串版本的 绳子