Как вызвать исключение для номера версии модуля

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

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

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
4
0
299
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Как это?

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 предоставляет установщик, который гарантирует, что все необходимое для запуска приложения присутствует во время установки. Это также дает вам возможность выбрать, какая из множества версий пакета, которые могут присутствовать на вашем ПК, будет загружаться при выполнении оператора импорта.

Другие вопросы по теме