106

我正在尝试使用六个将 python2 包移植到 python3(不是我自己的),以便它与两者兼容。但是,requirements.txt 中列出的软件包之一现在包含在 python3 标准库中,并且 pypi 版本在 python3 中不起作用,所以我想有条件地排除它。在 setup.py 中执行此操作很容易,我可以执行以下操作:

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

但我希望 requirements.txt 也能反映正确的列表。我在 pip 文档中找不到任何关于此的内容。那么有谁知道该怎么做,或者甚至可能吗?

4

2 回答 2

173

您可以使用环境标记来实现这一点,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 命令的字符串版本的字符串。

于 2015-10-31T11:39:26.730 回答
10

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

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

于 2013-10-24T07:22:01.873 回答