2009-01-07 4 views
4

Comment pouvez-vous déclencher une exception lorsque vous importez un module qui est inférieur ou supérieur à une valeur donnée pour sa __version__?Comment faire pour lever une exception sur le numéro de version d'un module

Il y a plusieurs façons de le faire, mais j'ai l'impression qu'il doit y avoir un moyen vraiment simple qui m'échappe pour le moment. Dans ce cas, le numéro de version est au format x.x.x

Répondre

6

Python est livré avec ce intégré dans distutils. Le module est appelé distutils.version et est capable de comparer plusieurs formats de numéro de version différents.

from distutils.version import StrictVersion 

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

Pour beaucoup plus d'informations que vous avez besoin, consultez la documentation:

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

Comme ça?

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

Ceci est un mot, mais fonctionne plutôt bien.

En outre, regardez dans pip, qui fournit des fonctionnalités plus avancées.

-1

Si vous connaissez la mise en forme exacte de la chaîne de version une comparaison simple fonctionnera:

>>> "1.2.2" > "1.2.1" 
True 

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

>>> "1.2.2" > "1.2.10" # Bug! 
True 
2

Si vous parlez des modules installés avec easy_install, c'est ce que vous avez besoin

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

cela provoque 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')) 
0

Vous devez utiliser setuptools:

Il vous permet de verrouiller les dépendances d'une application, donc même si plusieurs versions d'un oeuf ou d'un paquet existent sur un système, seule la bonne sera utilisée.

Ceci 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 qui garantit que tout ce qui est requis pour exécuter l'application est présent lors de l'installation. Il vous donne également le moyen de sélectionner parmi les nombreuses versions d'un paquet qui peut être présent sur votre PC celui qui est chargé lorsque vous émettez une instruction d'importation.

Questions connexes