Как поднять исключение на номер версии модуля - PullRequest
4 голосов
/ 07 января 2009

Как вы можете вызвать исключение при импорте модуля, который меньше или больше заданного значения для его __version __?

Есть много разных способов сделать это, но я чувствую, что должен быть какой-то действительно простой способ, который ускользает от меня на данный момент. В этом случае номер версии имеет формат x.x.x

Ответы [ 5 ]

6 голосов
/ 07 января 2009

Python поставляется с этим встроенным как часть distutils. Модуль называется distutils.version и может сравнивать несколько разных форматов номеров версий.

from distutils.version import StrictVersion

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

Для получения дополнительной информации, чем вам нужно, см. Документацию:

>>> import distutils.version
>>> help(distutils.version)
2 голосов
/ 07 января 2009

Если вы говорите о модулях, установленных с 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'))
1 голос
/ 07 января 2009

Как это?

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

Это многословно, но работает довольно хорошо.

Кроме того, посмотрите на pip , который предоставляет более продвинутую функциональность.

0 голосов
/ 07 января 2009

Вы должны использовать setuptools:

Позволяет блокировать зависимости приложения, поэтому даже если в системе существует несколько версий яйца или упаковки, будет использоваться только правильная версия.

Это лучший способ работы: вместо сбоя, если присутствует неправильная версия зависимости, лучше убедиться, что присутствует правильная версия.

Setuptools предоставляет установщик, который гарантирует, что все необходимое для запуска приложения присутствует во время установки. Это также дает вам возможность выбрать, какая из множества версий пакета, который может присутствовать на вашем ПК, будет загружена при выполнении оператора импорта.

0 голосов
/ 07 января 2009

Если вы знаете точное форматирование строки версии, сработает простое сравнение:

>>> "1.2.2" > "1.2.1"
True

Это будет работать только в том случае, если каждая часть версии состоит из отдельных цифр, однако:

>>> "1.2.2" > "1.2.10" # Bug!
True
...