2013-10-01 4 views
3

SetupTools를 사용하여 setup.py를 사용하는 경우 특정 버전의 Python에 대해 install_requires를 지정하는 방법이 있습니까?Python 버전을 기반으로하는 종속성을 처리하는 가장 좋은 방법은 무엇입니까?

예를 들어, 내 모듈 중 하나에서 OrderedDict를 사용해야하는 경우 Python < 2.7 버전을 사용하여 Python에서 ordereddict1.1 패키지를 설치하려고합니다.하지만 추가 할 이유가 없습니다. 파이썬 2.7 설치물에 해당합니다.

이 문제를 해결하는 가장 좋은 방법은 무엇입니까? 서로 다른 버전의 달걀을 분리합니까? 비 순수 모듈에는 이것이 필수적이지만 순수 파이썬이 될 것입니다.

답변

4

당신의 setup.py, 그냥 일반 파이썬 코드 당신이 동일한 일을 할 수 있도록 소스 코드에서 할 설치 스크립트에서.


문서는 2.X 코드 대 3.X을 수행하기위한 sys.version_info에 전환하는 방법을 보여 주지만 2.7 대 2.6에 대해 동일한 방식으로 작동합니다. 그래서, 코드가이 일을하는 경우 :

if sys.version_info < (2, 7); 
    from ordereddict import OrderedDict 
else: 
    from collections import OrderedDict 

를 ... 다음 설치 스크립트는이 작업을 수행 할 수 있습니다

import sys 
from setuptools import setup 

extra_install_requires = [] 
if sys.version_info < (2, 7): 
    extra_install_requires.append('ordereddict>=1.1') 

setup(
    # ... 
    install_requires = [...] + extra_install_requires, 
    # ... 
) 

을 다른 한편으로는, 코드가이 일을하는 경우 :

try: 
    from collections import OrderedDict 
except ImportError: 
    from ordereddict import OrderedDict 

... 일 수 있으며 version_info 일 수 있습니다. 이 :

extra_install_requires = [] 
try: 
    from collections import OrderedDict 
except ImportError: 
    extra_install_requires.append('ordereddict>=1.1') 

어느 쪽이든, (사용자가 이미 1.1이 이상하지 않는 한)는, 예를 들어, pip-2.5 install이 패키지는 ordereddict 모듈을 다운로드하고 설치하는 것입니다 경우, 2.7이면 안심할 수 없습니다.


는 사전 구축 된 계란을 배포 할 찾고 있다면, 다음 네, 파이썬 2.6 및 2.7에 대해 서로 다른 끝날 것입니다. 예를 들어, python2.6 setup.py bdist_egg && python2.7 setup.py bdist_egg 이후에 dist/Foo-0.1-py2.6.eggdist/Foo-0.1-py2.7.egg으로 끝나고 둘 다 배포해야합니다.

+0

의미가 있습니다. 신속하고 철저한 답변을 주셔서 감사합니다. – Paul

+0

if sys.version_info <(2, 7);에 세미콜론이 있습니다. – hepcat72

0

당신은 파이썬 버전을 확인하고 동적으로 오래된 파이썬 버전에 대한 요구 사항을 추가 할 수 있습니다 :

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 
    # ... 
) 
관련 문제