Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于Python版本处理依赖关系的最佳方法是什么?_Python_Setuptools - Fatal编程技术网

基于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

如果我有一个使用SetupTools的setup.py,有没有办法指定特定版本Python的安装要求


例如,如果我的一个模块需要使用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')