Проверка версии модуля 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 

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

  • Импорт модуля Spyder
  • Python: Как загрузить модуль дважды?
  • Импорт другого модуля из другого подкаталога родительского каталога текущего каталога (python)
  • Как я могу «поймать» ошибку seg при импорте модуля F2Py?
  • Почему «импортировать модуль», а затем «из модуля импорта пакетов» загружает модуль снова?
  • Быстро импортируйте пользовательские команды SPSS из Python
  • проблемы с импортом модуля python
  • Ленивые переменные модуля - это можно сделать?
  • Как перезагрузить модуль Python в IDLE?
  • Когда нужно разделить код на файлы / модули?
  • установка модуля запросов в окнах python 2.7
  •  
    Interesting Posts for Van-Lav

    Как заказать по дате defaultdict (list) значение?

    Python: как найти дубликаты в списке и обновить эти повторяющиеся элементы, переименовав их с добавлением прогрессивного письма

    Создайте случайный порядок (x, y) пар, не повторяя / последующие x

    Как использовать расширение отладки gdb python внутри virtualenv

    Как создать случайную переменную Rician?

    Как использовать сравнение и «если нет» в python?

    для цикла слишком долго для создания / экспорта вывода в Python

    Расширение переменной среды в строке с использованием python

    Python: сортировка списка с несколькими атрибутами и смешанным порядком

    Чтение выбранного столбца только из файла CSV, когда все остальные столбцы гарантированно идентичны

    Есть ли какая-нибудь библиотека в C, как проверка python?

    Определение типов всех переменных в проекте C

    Ошибка разблокировки типа при изменении моделей SqlAlchemy

    Как заставить python (используя win32com) создать новый экземпляр excel?

    mrdivide в MATLAB: что он делает, и как я могу это сделать в Python?

    Python - лучший язык программирования в мире.