문제

__version__에 대한 주어진 값보다 적은 모듈을 가져올 때 어떻게 예외를 제기 할 수 있습니까?

당신이 할 수있는 방법은 여러 가지가 있지만, 지금은 나를 피할 수있는 정말 간단한 방법이 있어야한다고 생각합니다. 이 경우 버전 번호는 XXX 형식입니다.

도움이 되었습니까?

해결책

파이썬은이 내장과 함께 Distutils의 일부로 제공됩니다. 모듈이 호출됩니다 distutils.version 여러 버전 번호 형식을 비교할 수 있습니다.

from distutils.version import StrictVersion

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

필요한 것보다 자세한 정보는 문서를 참조하십시오.

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

다른 팁

Easy_Install과 함께 설치된 모듈에 대해 이야기하고 있다면 이것이 필요한 것입니다.

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

설치된 모듈이 더 낮은 버전 인 경우 오류가 발생합니다.

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'))

이와 같이?

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

이것은 말이 많지만 잘 작동합니다.

또한 조사하십시오 , 보다 고급 기능을 제공합니다.

setuptools를 사용해야합니다.

응용 프로그램의 종속성을 잠글 수 있으므로 계란이나 패키지의 여러 버전이 시스템에 존재하더라도 올바른 것만 사용됩니다.

이것은 더 나은 작업 방법입니다. 부양의 잘못된 버전이 존재한다면 실패하기보다는 올바른 버전이 있는지 확인하는 것이 좋습니다.

Setuptools는 설치 프로그램을 제공하여 응용 프로그램을 실행하는 데 필요한 모든 것이 설치 시간에 존재하도록 보장합니다. 또한 PC에 존재할 수있는 여러 버전의 패키지 중 어느 것이 가져 오기 명령문을 발행 할 때로드되는지를 선택할 수있는 수단을 제공합니다.

버전 문자열의 정확한 형식을 알고 있다면 일반 비교가 작동합니다.

>>> "1.2.2" > "1.2.1"
True

그러나 버전의 각 부분이 단일 자릿수에있는 경우에만 작동합니다.

>>> "1.2.2" > "1.2.10" # Bug!
True
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top