Muchos módulos de Python de terceros tienen un atributo que contiene la información de la versión del módulo (generalmente algo como module.VERSION
o module.__version__
), sin embargo, algunos no.
Ejemplos particulares de estos módulos son libxslt y libxml2.
Necesito comprobar que se esté utilizando la versión correcta de estos módulos en tiempo de ejecución. ¿Hay alguna forma de hacer esto?
Una posible solución sería leer el código fuente en tiempo de ejecución, hacer un hash y luego compararlo con el hash de la versión conocida, pero eso es desagradable.
¿Hay mejores soluciones?
pkg_resources
posible que elija una versión diferente que sombree la que está ejecutando porque tiene mayor precedencia sobre su versiónPYTHONPATH
o similar.__version__
atributo: stackoverflow.com/q/17583443/562769pkg_resources
enlace es un error 404Algunas ideas:
fuente
Puedes usar
para ver los paquetes instalados en formato de requisitos.
fuente
Puede usar la
importlib_metadata
biblioteca para esto.Si está en python <
3.8
, primero instálelo con:Dado que Python
3.8
está incluido en la biblioteca estándar de Python.Luego, para verificar la versión de un paquete (en este ejemplo
lxml
) ejecute:Tenga en cuenta que esto solo funciona para paquetes instalados desde PyPI. Además, debe pasar un nombre de paquete como argumento del
version
método, en lugar de un nombre de módulo que proporciona este paquete (aunque normalmente son los mismos).fuente
Me pareció bastante poco confiable usar las diversas herramientas disponibles (incluida la mejor
pkg_resources
mencionada en esta otra respuesta ), ya que la mayoría de ellas no cubren todos los casos. Por ejemploComo necesitábamos una forma confiable de obtener la versión de cualquier paquete, módulo o submódulo, terminé escribiendo getversion . Es bastante simple de usar:
Consulte la documentación para obtener más detalles.
fuente
Para los módulos que no proporcionan
__version__
lo siguiente es feo pero funciona:o
fuente