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?
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?
Nachdem ich das Internet durchforstet hatte und versuchte herauszufinden, wie ich die Version eines Moduls sicherstellen kann, das ich verwende (anscheinend ist python_is_horrible.__version__
in Python 2 kein Ding?), über verschiedene Betriebssysteme und Python-Versionen hinweg... funktionierte buchstäblich keine dieser Antworten für mein Szenario...
Dann dachte ich einen Moment darüber nach und erkannte die Grundlagen... nach etwa 30 Minuten des Scheiterns...
geht davon aus, dass das Modul bereits installiert und importiert werden kann
>>> import sys,sqlite3
>>> sys.modules.get("sqlite3").version
'2.6.0'
>>> ".".join(str(x) for x in sys.version_info[:3])
'3.7.2'
>>> import sys,sqlite3
>>> sys.modules.get("sqlite3").version
'2.6.0'
>>> ".".join(str(x) for x in sys.version_info[:3])
'2.7.11'
Buchstäblich das ist es...
(Siehe auch Wie bekomme ich die Version eines installierten Moduls in Python programmgesteuert?)
Ich fand es ziemlich unzuverlässig, die verschiedenen verfügbaren Tools zu verwenden (einschließlich des besten pkg_resources
, wie von der Antwort von Jakub Kukul' erwähnt), da die meisten von ihnen nicht alle Fälle abdecken. Zum Beispiel
Weil wir eine zuverlässige Möglichkeit brauchten, die Version von irgend einem Paket, Modul oder Submodul zu erhalten, habe ich getversion geschrieben. Es ist ziemlich einfach zu bedienen:
from getversion import get_module_version
import foo
version, details = get_module_version(foo)
Siehe die Dokumentation für Details.
Ein Python-Programm, um alle Pakete aufzulisten (Sie können es in die Datei requirements.txt kopieren):
from pip._internal.utils.misc import get_installed_distributions
print_log = ''
for module in sorted(get_installed_distributions(), key=lambda x: x.key):
print_log += module.key + '~=' + module.version + '\n'
print(print_log)
Die Ausgabe würde so aussehen:
asn1crypto~=0.24.0
attrs~=18.2.0
automat~=0.7.0
beautifulsoup4~=4.7.1
botocore~=1.12.98
Für Situationen, in denen das Feld __version__
nicht definiert ist:
try:
from importlib import metadata
except ImportError:
import importlib_metadata as metadata # python<=3.7
metadata.version("package")
Alternativ, wie bereits erwähnt:
import pkg_resources
pkg_resources.get_distribution('package').version
Ich selbst arbeite in einer stark eingeschränkten Serverumgebung und leider funktionieren keine der Lösungen hier für mich. Es gibt möglicherweise keine global gültige Lösung, die für alle passt, aber ich habe einen schnellen Workaround gefunden, indem ich den Terminalausgabewert von "pip freeze" in meinem Skript gelesen und die Modulbezeichnungen und -versionen in einem Wörterbuch gespeichert habe.
import os
os.system('pip freeze > tmpoutput')
with open('tmpoutput', 'r') as f:
modules_version = f.read()
module_dict = {item.split("==")[0]:item.split("==")[-1] for item in modules_versions.split("\n")}
Rufen Sie die Versionen Ihrer Module ab, indem Sie den Modulbezeichnungsschlüssel übergeben, z.B.:
>> module_dict["seaborn"]
'0.9.0'
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.