1103 Stimmen

Wie überprüfe ich die Versionen von Python-Modulen?

Ich habe die Python-Module construct und statlib mit setuptools installiert:

sudo apt-get install python-setuptools

sudo easy_install statlib
sudo easy_install construct

Wie kann ich ihre Versionen über die Befehlszeile überprüfen?

1voto

mirekphd Punkte 2661

Und falls Ihr Produktionssystem so gehärtet ist, dass es weder pip noch conda hat, hier ist ein Bash-Ersatz für pip freeze:

ls /usr/local/lib/python3.8/dist-packages | grep info | awk -F "-" '{print $1"=="$2}' | sed 's/.dist//g'

(Stellen Sie sicher, dass Sie Ihren dist-packages-Ordner auf Ihre aktuelle Python-Version aktualisieren und inkonsistente Namen ignorieren, z.B. Unterstriche vs. Bindestriche).

Beispielhafter Ausdruck:

Flask==1.1.2
Flask_Caching==1.10.1
gunicorn==20.1.0
[..]

1voto

Hier ist ein kleines Bash-Programm, um die Version eines beliebigen Pakets in Ihrer Python-Umgebung zu erhalten. Kopieren Sie dies einfach in Ihr /usr/bin und geben Sie ihm ausführbare Berechtigungen:

#!/bin/bash
packageName=$1

python -c "import ${packageName} as package; print(package.__version__)"

Dann können Sie es einfach im Terminal ausführen, vorausgesetzt, Sie haben das Skript py-check-version genannt:

py-check-version whatever_package

1voto

Tobias Bleisch Punkte 143

Um eine Liste der nicht standardmäßigen (pip) Module zu erhalten, die im aktuellen Modul importiert wurden:

[{pkg.key : pkg.version} for pkg in pip.get_installed_distributions() 
   if pkg.key in set(sys.modules) & set(globals())]

Ergebnis:

>>> import sys, pip, nltk, bs4
>>> [{pkg.key : pkg.version} for pkg in pip.get_installed_distributions() if pkg.key in set(sys.modules) & set(globals())]
[{'pip': '9.0.1'}, {'nltk': '3.2.1'}, {'bs4': '0.0.1'}]

Hinweis:

Dieser Code wurde aus Lösungen sowohl auf dieser Seite als auch von How to list imported modules? zusammengestellt.

0voto

Alessio Arena Punkte 390

Basierend auf Jakub Kukuls Antwort habe ich einen zuverlässigeren Weg gefunden, dieses Problem zu lösen.

Das Hauptproblem dieses Ansatzes ist, dass die Pakete "konventionell" installiert sein müssen (was nicht pip install --user einschließt) oder sich im System-PATH bei der Python-Initialisierung befinden müssen.

Um dies zu umgehen, können Sie pkg_resources.find_distributions(path_to_search) verwenden. Dies sucht im Grunde nach Distributionen, die importierbar wären, wenn path_to_search im System-PATH wäre.

Wir können durch diesen Generator wie folgt iterieren:

avail_modules = {}
distros = pkg_resources.find_distributions(path_to_search)
for d in distros:
    avail_modules[d.key] = d.version

Dies liefert ein Wörterbuch mit Modulen als Schlüssel und ihrer Version als Wert zurück. Dieser Ansatz kann auf viel mehr als nur die Versionsnummer ausgedehnt werden.

Danke an Jakub Kukul für den Hinweis in die richtige Richtung.

-1voto

DogeCode Punkte 188

Sie können einfach subprocess.getoutput(python3 --version) verwenden:

import subprocess as sp
print(sp.getoutput(python3 --version))

# Oder wie es Ihnen am besten passt!
py3_version = sp.getoutput(python3 --version)

def check_version(name, version):...

check_version('python3', py3_version)

Für weitere Informationen und Möglichkeiten, dies ohne Abhängigkeit von Attribut __version__ zu tun:

Ausgabe von os.system einer Variable zuweisen und verhindern, dass sie auf dem Bildschirm angezeigt wird

Sie können auch subprocess.check_output() verwenden, das einen Fehler auslöst, wenn der Unterprozess etwas anderes als den Exit-Code 0 zurückgibt:

_[subprocess — Unterprozess-Verwaltung](https://docs.python.org/3/library/subprocess.html#check_output())_

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