iTa*_*ayb 39 python distutils setuptools 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",
],
Run Code Online (Sandbox Code Playgroud)
怎么能做到这一点?
unh*_*ler 70
setuptools使用环境标记支持此功能.
install_requires=[
'enum34;python_version<"3.4"',
'pywin32 >= 1.0;platform_system=="Windows"'
]
Run Code Online (Sandbox Code Playgroud)
官方文档中详细说明了这一点.根据更改日志在v20.5中添加,但实施在v20.8.1之前不稳定(这只是15天的差距).
原始答案(仍然有效,但将来可能会被弃用):
setuptools在extras_require论证中使用支持.
格式如下:
extras_require={
':python_version=="2.7"': ["mock"],
},
Run Code Online (Sandbox Code Playgroud)
它将支持其他比较运算符.
遗憾的是,文档中没有提到它.在寻找答案时,我发现PEP-426在谈论"环境标志".通过这句话,我能够找到一个具有以下注释的setuptools票证:
我已经成功地使用了标记功能来有选择地和声明性地要求依赖.有关示例,请参阅backports.unittest_mock.通过'extras',mock将是必需的,但仅限于Python 2.当我可以依赖Setuptools 17.1时,我可以将该依赖项更改为python_version < "3.3".
这里已经讨论过,看来推荐的方法是测试你setup.py使用的Python版本sys.version_info;
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)
Run Code Online (Sandbox Code Playgroud)