基于Python版本处理依赖关系的最佳方法是什么?
如果我有一个使用SetupTools的setup.py,有没有办法指定特定版本Python的安装要求基于Python版本处理依赖关系的最佳方法是什么?,python,setuptools,Python,Setuptools,如果我有一个使用SetupTools的setup.py,有没有办法指定特定版本Python的安装要求 例如,如果我的一个模块需要使用OrderedDict,我想要Python版本您可以只检查Python版本并动态附加对较旧Python版本的要求: from setuptools import setup import sys install_requires = [ # your global requirements # ... ] if sys.version_info &l
例如,如果我的一个模块需要使用OrderedDict,我想要Python版本您可以只检查Python版本并动态附加对较旧Python版本的要求:
from setuptools import setup
import sys
install_requires = [
# your global requirements
# ...
]
if sys.version_info < (2, 7):
install_requires.append('ordereddict >= 1.1')
setup(
# ...
install_requires=install_requires
# ...
)
从设置工具导入设置
导入系统
安装\u需要=[
#您的全球需求
# ...
]
如果系统版本信息<(2,7):
安装\u requires.append('ordereddict>=1.1')
设置(
# ...
安装要求=安装要求
# ...
)
您的setup.py
只是简单的Python代码,因此您可以在安装脚本的源代码中执行与您完全相同的操作
该文档显示了如何打开系统版本信息来执行3.x和2.x代码,但其工作方式与2.7和2.6相同。因此,如果您的代码正在执行此操作:
if sys.version_info < (2, 7);
from ordereddict import OrderedDict
else:
from collections import OrderedDict
try:
from collections import OrderedDict
except ImportError:
from ordereddict import OrderedDict
…然后,虽然您可以使用version\u info
,但您也可以这样做:
extra_install_requires = []
try:
from collections import OrderedDict
except ImportError:
extra_install_requires.append('ordereddict>=1.1')
无论哪种方式,如果您(例如,
pip-2.5)安装此软件包,它将下载并安装orderedict
模块(除非用户已经拥有1.1或更高版本);有了2.7,它就不需要安神了
如果您希望分发预构建的鸡蛋,那么是的,对于Python2.6和2.7,它们最终会有所不同。例如,在python2.6 setup.py bdist_egg和&python2.7 setup.py bdist_egg
之后,您将得到dist/Foo-0.1-py2.6.egg
和dist/Foo-0.1-py2.7.egg
,并且您将不得不分发这两个文件。很有意义!感谢您快速而彻底的回复。如果sys.version\u info<(2,7),则在中有一个分号代码>
extra_install_requires = []
try:
from collections import OrderedDict
except ImportError:
extra_install_requires.append('ordereddict>=1.1')