Viele Python-Module von Drittanbietern verfügen über ein Attribut, das die Versionsinformationen für das Modul enthält (normalerweise so etwas wie module.VERSION
oder module.__version__
), einige jedoch nicht.
Besondere Beispiele für solche Module sind libxslt und libxml2.
Ich muss überprüfen, ob zur Laufzeit die richtige Version dieser Module verwendet wird. Gibt es eine Möglichkeit, dies zu tun?
Eine mögliche Lösung wäre, die Quelle zur Laufzeit einzulesen, zu hashen und dann mit dem Hash der bekannten Version zu vergleichen, aber das ist böse.
Gibt es bessere Lösungen?
pkg_resources
möglicherweise eine andere Version verwendet, die die tatsächlich ausgeführte Version überschattet, da sie eine höhere Priorität für IhrePYTHONPATH
oder eine ähnliche Version hat .__version__
Attribut erstellt wird: stackoverflow.com/q/17583443/562769pkg_resources
Link ist ein Fehler 404Einige Ideen:
quelle
Sie können verwenden
um die installierten Pakete im Anforderungsformat anzuzeigen.
quelle
Sie können hierfür die
importlib_metadata
Bibliothek verwenden.Wenn Sie auf Python <sind
3.8
, installieren Sie es zuerst mit:Seit Python ist
3.8
es in der Standardbibliothek von Python enthalten.Um dann die Version eines Pakets (in diesem Beispiel
lxml
) zu überprüfen, führen Sie Folgendes aus :Beachten Sie, dass dies nur für Pakete funktioniert, die von PyPI installiert wurden. Außerdem müssen Sie der
version
Methode einen Paketnamen als Argument übergeben und nicht einen Modulnamen, den dieses Paket bereitstellt (obwohl diese normalerweise identisch sind).quelle
Ich fand es ziemlich unzuverlässig, die verschiedenen verfügbaren Tools zu verwenden (einschließlich des besten,
pkg_resources
das in dieser anderen Antwort erwähnt wird ), da die meisten nicht alle Fälle abdecken. BeispielsweiseDa wir einen zuverlässigen Weg , um die Version des benötigten jedes Paket, Modul oder Submodul, landete ich schriftlich bis getversion . Es ist ganz einfach zu bedienen:
Einzelheiten finden Sie in der Dokumentation .
quelle
Für Module,
__version__
die Folgendes nicht bieten, ist dies hässlich, funktioniert aber:oder
quelle