Frage

Wie kann man eine Ausnahme auslösen, wenn Sie ein Modul importieren, die kleiner oder größer ist als ein vorgegebener Wert für seine __version __?

Es gibt viele verschiedene Möglichkeiten, wie Sie es tun könnte, aber ich fühle mich wie es muss eine wirklich einfache Art und Weise sein, die mich im Moment entzieht sich. In diesem Fall ist die Versionsnummer des Formats x.x.x

War es hilfreich?

Lösung

Python kommt mit diesem eingebauten als Teil distutils. Das Modul wird als distutils.version und ist in der Lage verschiedene Versionsnummern Formate vergleichen.

from distutils.version import StrictVersion

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

Für viel mehr Informationen, als Sie brauchen, finden Sie in der Dokumentation:

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

Andere Tipps

Wenn Sie sich über Module mit easy_install installiert sprechen, das ist, was Sie brauchen,

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

Dies wird einen Fehler auslösen, wenn das installierte Modul einer älteren Version ist

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

Wie das?

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

Das ist wordy, aber funktioniert ziemlich gut.

Schauen Sie auch in pip , die erweiterte Funktionalität bereitstellt.

Sie sollten Setuptools werden:

Es ermöglicht Ihnen, die Abhängigkeiten einer Anwendung zu sperren, so dass selbst wenn mehrere Versionen eines Eies oder Paket auf einem System gibt es nur die richtigen jemals verwendet werden.

Dies ist eine bessere Arbeitsweise: Statt fehlschlagen, wenn die falsche Version eines dependancy vorhanden ist, ist es besser, um sicherzustellen, dass die richtige Version vorliegt.

Setuptools bieten einen Installer, der das alles garantiert erforderlich, um die Anwendung auszuführen vorhanden ist, installieren Zeit. Es gibt Ihnen auch die Mittel, welche der vielen Versionen eines Pakets auszuwählen, die auf Ihrem PC vorhanden sein kann, der ist, der geladen wird, wenn Sie eine Import-Anweisung erteilen.

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

>>> "1.2.2" > "1.2.1"
True

Dies wird nur funktionieren, wenn jeder Teil der Version in den einstelligen Bereich ist, aber:

>>> "1.2.2" > "1.2.10" # Bug!
True
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top