Многие сторонние модули Python имеют атрибут, содержащий информацию о версии для модуля (обычно что-то вроде module.VERSION
или module.__version__
), однако у некоторых нет.
Конкретными примерами таких модулей являются libxslt и libxml2.
Мне нужно проверить, что правильная версия этих модулей используется во время выполнения. Есть ли способ сделать это?
Потенциальным решением было бы прочитать исходный код во время выполнения, хэшировать его, а затем сравнить с хешем известной версии, но это неприятно.
Есть ли лучшие решения?
pkg_resources
можете выбрать другую версию, дублирующую ту, которую вы действительно используете, потому что она имеет более высокий приоритет над вашейPYTHONPATH
или аналогичной.__version__
атрибут: stackoverflow.com/q/17583443/562769pkg_resources
ссылка - ошибка 404Некоторые идеи:
источник
Ты можешь использовать
чтобы увидеть установленные пакеты в формате требований.
источник
Вы можете использовать
importlib_metadata
для этого библиотеку.Если вы используете python <
3.8
, сначала установите его с помощью:Начиная с python,
3.8
он включен в стандартную библиотеку python.Затем, чтобы проверить версию пакета (в этом примере
lxml
), выполните:Имейте в виду, что это работает только для пакетов, установленных из PyPI. Кроме того, вы должны передать имя пакета в качестве аргумента
version
методу, а не имя модуля, предоставляемого этим пакетом (хотя обычно они одинаковы).источник
Я счел довольно ненадежным использовать различные доступные инструменты (в том числе лучший,
pkg_resources
упомянутый в этом другом ответе ), поскольку большинство из них не охватывают все случаи. НапримерПоскольку нам нужен был надежный способ получить версию любого пакета, модуля или подмодуля, я в итоге написал getversion . Использовать довольно просто:
Подробности смотрите в документации .
источник
Для модулей, которые не предоставляют
__version__
следующее некрасиво, но работает:или
источник