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

È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top