2009-01-07 3 views
4

__version__에 대해 지정된 값보다 크거나 작은 모듈을 가져올 때 예외를 발생시키는 방법은 무엇입니까?모듈의 버전 번호에 예외를 발생시키는 방법

당신이 할 수있는 여러 가지 방법이 있지만, 나는 그 순간 나를 벗어날 수있는 아주 간단한 방법이 있어야한다고 생각합니다. 이 경우 버전 번호는 x.x.x

답변

6

파이썬은 distutils의 일부로이 inbuilt와 함께 제공됩니다. 이 모듈은 distutils.version이라고하며 여러 가지 버전 번호 형식을 비교할 수 있습니다. 자세한 정보는 당신이 필요로하는 것보다, 설명서를 참조 방법을

from distutils.version import StrictVersion 

print StrictVersion('1.2.2') > StrictVersion('1.2.1') 

: 당신이 버전 문자열의 정확한 형식을 알고있는 경우

>>> import distutils.version 
>>> help(distutils.version) 
1

형식입니다.

assert tuple(map(int,module.__version__.split("."))) >= (1,2), "Module not version 1.2.x" 

이것은 매우 어색하지만 잘 작동합니다.

또한 고급 기능을 제공하는 pip을 참조하십시오.

-1

일반 비교 작동합니다

>>> "1.2.2" > "1.2.1" 
True 

이를 버전의 각 부분이 한 자리 숫자 인 경우에만 작동합니다 :

>>> "1.2.2" > "1.2.10" # Bug! 
True 
,
2

당신이 easy_install을 설치 모듈에 대해 이야기하는 경우, 이것은 당신이 설치된 모듈이 당신을 사용해야 낮은 버전

Traceback (most recent call last): 
    File "tempplg.py", line 2, in <module> 
    pkg_resources.require("TurboGears>=1.0.5") 
    File "/usr/lib/python2.5/site-packages/pkg_resources.py", line 626, in require 
    needed = self.resolve(parse_requirements(requirements)) 
    File "/usr/lib/python2.5/site-packages/pkg_resources.py", line 528, in resolve 
    raise VersionConflict(dist,req) # XXX put more info here 
pkg_resources.VersionConflict: (TurboGears 1.0.4.4 (/usr/lib/python2.5/site-packages/TurboGears-1.0.4.4-py2.5.egg), Requirement.parse('TurboGears>=1.0.5')) 
0

의 경우이 오류가 인상됩니다

import pkg_resources 
pkg_resources.require("TurboGears>=1.0.5") 

을 필요로하는 무슨이다 setuptools :

응용 프로그램의 종속성을 잠글 수 있으므로 시스템에 여러 버전의 계란 또는 패키지가있는 경우에도 올바른 응용 프로그램 만 사용됩니다.

이것은 더 나은 작업 방법입니다. 잘못된 버전의 의존성이있는 경우 실패하지 말고 적합한 버전이 있는지 확인하는 것이 좋습니다.

Setuptools는 설치시 응용 프로그램을 실행하는 데 필요한 모든 것이 있음을 보장하는 설치 프로그램을 제공합니다. 또한 PC에있을 수있는 많은 버전의 패키지 중 가져 오기 명령문을 발행 할 때로드되는 패키지를 선택할 수있는 방법을 제공합니다.

관련 문제