Come sollevare un'eccezione sul numero di versione di un modulo
-
03-07-2019 - |
Domanda
Come si può sollevare un'eccezione quando si importa un modulo minore o maggiore di un determinato valore per la sua __version__?
Ci sono molti modi in cui potresti farlo, ma sento che ci deve essere un modo davvero semplice che mi sfugge al momento. In questo caso il numero di versione è nel formato x.x.x
Soluzione
Python viene fornito con questo integrato come parte di distutils. Il modulo si chiama distutils.version
ed è in grado di confrontare diversi formati di numeri di versione.
from distutils.version import StrictVersion
print StrictVersion('1.2.2') > StrictVersion('1.2.1')
Per ulteriori informazioni rispetto a quelle necessarie, consultare la documentazione:
>>> import distutils.version
>>> help(distutils.version)
Altri suggerimenti
Se stai parlando di moduli installati con easy_install, questo è ciò di cui hai bisogno
import pkg_resources
pkg_resources.require("TurboGears>=1.0.5")
questo genererà un errore se il modulo installato è di una versione precedente
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'))
Ti piace?
assert tuple(map(int,module.__version__.split("."))) >= (1,2), "Module not version 1.2.x"
Questo è prolisso, ma funziona abbastanza bene.
Inoltre, guarda pip , che fornisce funzionalità più avanzate.
Dovresti usare setuptools:
Ti consente di bloccare le dipendenze di un'applicazione, quindi anche se esistono più versioni di un uovo o di un pacchetto su un sistema, verrà utilizzata solo quella giusta.
Questo è un modo migliore di lavorare: piuttosto che fallire se è presente la versione sbagliata di una dipendenza, è meglio assicurarsi che sia presente la versione giusta.
Setuptools fornisce un programma di installazione che garantisce che tutto ciò che è necessario per eseguire l'applicazione sia presente al momento dell'installazione. Ti dà anche i mezzi per selezionare quale delle molte versioni di un pacchetto che può essere presente sul tuo PC è quella che viene caricata quando emetti una dichiarazione di importazione.
Se conosci l'esatta formattazione della stringa di versione, un semplice confronto funzionerà:
>>> "1.2.2" > "1.2.1"
True
Funzionerà solo se ogni parte della versione è nelle singole cifre, però:
>>> "1.2.2" > "1.2.10" # Bug!
True