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






Как это?
assert tuple(map(int,module.__version__.split("."))) >= (1,2), "Module not version 1.2.x"
Это многословно, но работает довольно хорошо.
Также обратите внимание на пип, который предоставляет более расширенные функции.
Python входит в состав distutils. Модуль называется distutils.version и может сравнивать несколько различных форматов номеров версий.
from distutils.version import StrictVersion
print StrictVersion('1.2.2') > StrictVersion('1.2.1')
Для получения дополнительной информации, чем вам нужно, см. Документацию:
>>> import distutils.version
>>> help(distutils.version)
Если вы знаете точное форматирование строки версии, простое сравнение будет работать:
>>> "1.2.2" > "1.2.1"
True
Это будет работать только в том случае, если каждая часть версии состоит из однозначных цифр:
>>> "1.2.2" > "1.2.10" # Bug!
True
Если вы говорите о модулях, установленных с помощью 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'))
Вы должны использовать setuptools:
Это позволяет заблокировать зависимости приложения, поэтому даже если в системе существует несколько версий яйца или пакета, будет использоваться только нужная версия.
Это лучший способ работы: вместо того, чтобы потерпеть неудачу, если присутствует неправильная версия зависимости, лучше убедиться, что присутствует правильная версия.
Setuptools предоставляет установщик, который гарантирует, что все необходимое для запуска приложения присутствует во время установки. Это также дает вам возможность выбрать, какая из множества версий пакета, которые могут присутствовать на вашем ПК, будет загружаться при выполнении оператора импорта.