Question

Comment pouvez-vous générer une exception lorsque vous importez un module inférieur ou supérieur à une valeur donnée pour sa version __?

Vous pouvez le faire de différentes manières, mais j’ai le sentiment qu’il doit exister un moyen très simple qui m’échappe pour le moment. Dans ce cas, le numéro de version est au format x.x.x

Était-ce utile?

La solution

Python est livré avec cette fonctionnalité intégrée à distutils. Le module s'appelle distutils.version et permet de comparer plusieurs formats de numéros de version différents.

from distutils.version import StrictVersion

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

Pour plus d'informations que vous ne le souhaitez, consultez la documentation:

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

Autres conseils

Si vous parlez de modules installés avec easy_install, vous en avez besoin

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

cela provoquera une erreur si le module installé est d'une version inférieure

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

Comme ça?

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

Ceci est verbeux, mais fonctionne plutôt bien.

Consultez également le pip , qui fournit des fonctionnalités plus avancées.

Vous devriez utiliser setuptools:

Il vous permet de verrouiller les dépendances d’une application. Ainsi, même si plusieurs versions d’un œuf ou d’un package existent sur un système, seule la bonne sera utilisée.

C’est une meilleure façon de travailler: Plutôt que d’échouer si la mauvaise version d’une dépendance est présente, il est préférable de s’assurer que la bonne version est présente.

Setuptools fournit un programme d’installation garantissant que tout ce qui est nécessaire pour exécuter l’application est présent au moment de l’installation. Il vous donne également le moyen de sélectionner celle parmi les nombreuses versions d’un paquet susceptible d’être présente sur votre PC est celle qui est chargée lorsque vous émettez une déclaration d’importation.

Si vous connaissez le formatage exact de la chaîne de version, une comparaison simple fonctionnera:

>>> "1.2.2" > "1.2.1"
True

Ceci ne fonctionnera que si chaque partie de la version est dans les chiffres simples, cependant:

>>> "1.2.2" > "1.2.10" # Bug!
True
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top