install_requires基于python版本

时间:2014-01-13 00:19:23

标签: python setuptools distutils distribute install-requires

我有一个可以在python 2和python 3上运行的模块。在Python< 3.2中我想安装一个特定的包作为依赖。对于Python> = 3.2。

类似的东西:

 install_requires=[
    "threadpool >= 1.2.7 if python_version < 3.2.0",
 ],

如何做到这一点?

2 个答案:

答案 0 :(得分:58)

setuptools使用environment markers支持此功能。

install_requires=[
    'enum34;python_version<"3.4"',
    'pywin32 >= 1.0;platform_system=="Windows"'
]

official documentation详细介绍了这一点。基于change log在v20.5中添加,但实施在v20.8.1之前不稳定(只有15天的差距)。

原始答案(仍然有效,但将来可能会弃用):

setuptoolsextras_require参数范围内支持此功能。

<击>

格式如下:

extras_require={
    ':python_version=="2.7"': ["mock"],
},

它将支持其他比较运算符。

可悲的是,documentation中没有提到它。在寻找答案时,我发现PEP-426在谈论“环境标记”。通过该短语,我能够找到setuptools ticket,其中包含以下注释:

<击>   

我已经成功地使用了标记功能来有选择地和声明性地要求依赖。有关示例,请参阅backports.unittest_mock。通过'extras',mock将是必需的,但仅限于Python 2.当我可以依赖Setuptools 17.1时,我可以将该依赖项更改为python_version < "3.3"

答案 1 :(得分:9)

已经讨论了here,建议的方法是使用setup.pysys.version_info内测试Python版本;

import sys

if sys.version_info >= (3,2):
    install_requires = ["threadpool >= 1.2.7"]
else:
    install_requires = ["threadpool >= 1.2.3"]

setup(..., install_requires=install_requires)