Le Verpackung Bibliothek enthält Dienstprogramme für Arbeiten mit Versionen und andere verpackungsbezogene Funktionen. Dies implementiert PEP 0440 -- Versionskennzeichnung und ist auch in der Lage, Versionen zu parsen, die nicht dem PEP folgen. Es wird von pip und anderen gängigen Python-Tools zum Parsen und Vergleichen von Versionen verwendet.
$ pip install packaging
from packaging.version import parse as parse_version
version = parse_version('1.0.3.dev')
Dieser wurde vom ursprünglichen Code in setuptools und pkg_resources abgetrennt, um ein leichteres und schnelleres Paket zu erstellen.
Bevor es die Paketierungsbibliothek gab, war (und ist) diese Funktionalität in pkg_resources zu finden, einem Paket, das von setuptools bereitgestellt wird. Dies wird jedoch nicht mehr bevorzugt, da die Installation von setuptools nicht mehr gewährleistet ist (es gibt andere Paketierungswerkzeuge) und pkg_resources ironischerweise ziemlich viele Ressourcen verbraucht, wenn es importiert wird. Dennoch sind alle Dokumente und Diskussionen immer noch relevant.
Von der parse_version()
docs :
Analysiert den Versionsstring eines Projekts, wie in PEP 440 definiert. Der Rückgabewert ist ein Objekt, das die Version darstellt. Diese Objekte können miteinander verglichen und sortiert werden. Der Sortieralgorithmus entspricht der Definition von PEP 440 mit dem Zusatz, dass jede Version, die keine gültige PEP 440-Version ist, als kleiner als jede gültige PEP 440-Version betrachtet wird und die ungültigen Versionen weiterhin nach dem ursprünglichen Algorithmus sortiert werden.
Der "ursprüngliche Algorithmus", auf den verwiesen wird, wurde in älteren Versionen der Dokumente definiert, bevor es PEP 440 gab.
Semantisch ist das Format eine grobe Kreuzung zwischen distutils' StrictVersion
y LooseVersion
Klassen; wenn Sie ihm Versionen geben, die mit StrictVersion
dann werden sie auf die gleiche Weise vergleichen. Ansonsten sind Vergleiche eher eine "intelligentere" Form von LooseVersion
. Es ist möglich, pathologische Versionskodierungsschemata zu erstellen, die diesen Parser täuschen, aber sie sollten in der Praxis sehr selten sein.
Le Dokumentation liefert einige Beispiele:
Wenn Sie sicher sein wollen, dass das von Ihnen gewählte Nummerierungsschema funktioniert so funktioniert, wie Sie es sich vorstellen, können Sie die pkg_resources.parse_version()
Funktion, um verschiedene Versionsnummern zu vergleichen:
>>> from pkg_resources import parse_version
>>> parse_version('1.9.a.dev') == parse_version('1.9a0dev')
True
>>> parse_version('2.1-rc2') < parse_version('2.1')
True
>>> parse_version('0.6a9dev-r41475') < parse_version('0.6a9')
True