Проверка версии модуля Python во время выполнения

Многие сторонние модули Python имеют атрибут, который содержит информацию о версии для модуля (обычно это что-то вроде module.VERSION или module.__version__ ), однако некоторые из них этого не делают.

Частными примерами таких модулей являются libxslt и libxml2.

Мне нужно проверить, что правильная версия этих модулей используется во время выполнения. Есть ли способ сделать это?

Потенциальное решение wold – читать в источнике во время выполнения, хешировать его, а затем сравнивать его с хэшем известной версии, но это противно.

Есть ли лучшие решения?

4 Solutions collect form web for “Проверка версии модуля Python во время выполнения”

Я бы держался подальше от хеширования. В используемой версии libxslt может содержаться некоторый тип патча, который не влияет на его использование.

В качестве альтернативы, я хотел бы предложить, чтобы вы не проверяли во время выполнения (не знаете, является ли это жестким требованием или нет). Для файлов python я пишу, что имеет внешние зависимости (сторонние библиотеки), я пишу сценарий, который пользователи могут запускать, чтобы проверить их установку python, чтобы проверить, установлены ли соответствующие версии модулей.

Для модулей, не имеющих определенного атрибута «версия», вы можете проверить интерфейсы, которые он содержит (классы и методы), и посмотреть, соответствуют ли они интерфейсу, который они ожидают. Затем в действительном коде, над которым вы работаете, предположите, что сторонние модули имеют интерфейс, который вы ожидаете.

Используйте pkg_resources . Все, что установлено из PyPI, должно иметь номер версии.

 >>> import pkg_resources >>> pkg_resources.get_distribution("blogofile").version '0.7.1' 

Некоторые идеи:

  1. Попробуйте проверить функции, которые существуют или не существуют в ваших необходимых версиях.
  2. Если функциональных различий нет, проверьте аргументы функции и подписи.
  3. Если вы не можете понять это из сигнатур функций, настройте некоторые заглушки во время импорта и проверьте их поведение.

Вы можете использовать

 pip freeze 

для просмотра установленных пакетов в формате требований.

  • Ленивые переменные модуля - это можно сделать?
  • Вложение Python в C: проблемы с импортом локальных модулей
  • Добавление или удаление виджетов tkinter из других модулей
  • установка модуля запросов в окнах python 2.7
  • Эффективный способ настройки ведения журнала через модуль пакета
  • Colorama AssertionError в Python 3.2
  • Python: модули и упаковка - почему файл __init__.py не выполняется до __main__.py?
  • В Python я могу вызвать main () импортированного модуля?
  • Python - лучший язык программирования в мире.