5 Stimmen

Wie man eine Ausnahme bei der Versionsnummer eines Moduls auslöst

Wie kann man eine Ausnahme auslösen, wenn man ein Modul importiert, das kleiner oder größer als ein bestimmter Wert für seine __version__ ist?

Es gibt viele verschiedene Möglichkeiten, wie man das machen könnte, aber ich habe das Gefühl, dass es eine ganz einfache Möglichkeit geben muss, die mir im Moment entgeht. In diesem Fall hat die Versionsnummer das Format x.x.x

6voto

gak Punkte 30810

Python hat dieses Modul als Teil der Distutils bereits eingebaut. Das Modul heißt distutils.version und ist in der Lage, mehrere verschiedene Versionsnummernformate zu vergleichen.

from distutils.version import StrictVersion

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

In der Dokumentation finden Sie weit mehr Informationen als nötig:

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

2voto

JV. Punkte 2530

Wenn es sich um Module handelt, die mit easy_install installiert wurden, benötigen Sie Folgendes

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

dies führt zu einem Fehler, wenn das installierte Modul eine niedrigere Version hat

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

1voto

S.Lott Punkte 371691

Etwa so?

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

Das ist zwar wortreich, funktioniert aber ziemlich gut.

Informieren Sie sich auch über pip , die erweiterte Funktionen bietet.

0voto

Salim Fadhley Punkte 20320

Sie sollten setuptools verwenden:

Es ermöglicht Ihnen, die Abhängigkeiten einer Anwendung zu sperren, so dass selbst wenn mehrere Versionen eines Eies oder Pakets auf einem System existieren, immer nur die richtige verwendet wird.

Dies ist eine bessere Arbeitsweise: Anstatt fehlzuschlagen, wenn die falsche Version einer Abhängigkeit vorhanden ist, ist es besser sicherzustellen, dass die richtige Version vorhanden ist.

Setuptools stellt ein Installationsprogramm bereit, das garantiert, dass alles, was zur Ausführung der Anwendung erforderlich ist, bei der Installation vorhanden ist. Es gibt Ihnen auch die Möglichkeit auszuwählen, welche der vielen Versionen eines Pakets, die auf Ihrem PC vorhanden sein können, diejenige ist, die geladen wird, wenn Sie eine Importanweisung geben.

-3voto

Algorias Punkte 2947

Wenn Sie die genaue Formatierung der Versionszeichenfolge kennen, funktioniert ein einfacher Vergleich:

>>> "1.2.2" > "1.2.1"
True

Das funktioniert allerdings nur, wenn jeder Teil der Version im einstelligen Bereich liegt:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X