我有一个可以在python 2和python 3上运行的模块。在Python< 3.2中我想安装一个特定的包作为依赖。对于Python> = 3.2。
类似的东西:
install_requires=[
"threadpool >= 1.2.7 if python_version < 3.2.0",
],
如何做到这一点?
答案 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天的差距)。
原始答案(仍然有效,但将来可能会弃用):
setuptools
在extras_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.py
在sys.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)