Pregunta

¿Cómo puede generar una excepción cuando importa un módulo que es menor o mayor que un valor dado para su __versión__?

Hay muchas maneras diferentes en las que puedes hacerlo, pero creo que debe haber alguna manera realmente simple que me elude en este momento. En este caso, el número de versión tiene el formato x.x.x

¿Fue útil?

Solución

Python viene con esto incorporado como parte de los nombres. El módulo se llama distutils.version y puede comparar varios formatos de número de versión diferentes.

from distutils.version import StrictVersion

print StrictVersion('1.2.2') > StrictVersion('1.2.1')

Para obtener más información de la que necesita, consulte la documentación:

>>> import distutils.version
>>> help(distutils.version)

Otros consejos

Si está hablando de módulos instalados con easy_install, esto es lo que necesita

import pkg_resources
pkg_resources.require("TurboGears>=1.0.5")

esto generará un error si el módulo instalado es de una versión inferior

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'))

¿Te gusta esto?

assert tuple(map(int,module.__version__.split("."))) >= (1,2), "Module not version 1.2.x"

Esto es prolijo, pero funciona bastante bien.

También, vea pip , que proporciona una funcionalidad más avanzada.

Deberías usar setuptools:

Le permite bloquear las dependencias de una aplicación, por lo que incluso si existen varias versiones de un huevo o paquete en un sistema, solo se utilizará la correcta.

Esta es una mejor manera de trabajar: en lugar de fallar si está presente la versión incorrecta de una dependencia, es mejor asegurarse de que esté presente la versión correcta.

Setuptools proporciona un instalador que garantiza que todo lo necesario para ejecutar la aplicación está presente en el momento de la instalación. También le proporciona los medios para seleccionar cuál de las muchas versiones de un paquete que pueden estar presentes en su PC es la que se carga cuando emite una declaración de importación.

Si conoce el formato exacto de la cadena de versión, una comparación simple funcionará:

>>> "1.2.2" > "1.2.1"
True

Esto solo funcionará si cada parte de la versión está en los dígitos individuales, sin embargo:

>>> "1.2.2" > "1.2.10" # Bug!
True
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top