it-swarm.com.de

Wie prüfe ich die Version der Python-Module?

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

# Install setuptools to be able to download the following
Sudo apt-get install python-setuptools

# Install statlib for lightweight statistical tools
Sudo easy_install statlib

# Install construct for packing/unpacking binary data
Sudo easy_install construct

Ich möchte ihre Versionen (programmgesteuert) überprüfen können. Gibt es ein Äquivalent zu python --version, das ich von der Befehlszeile aus ausführen kann?

Meine Python-Version ist 2.7.3.

448
tarabyte

Ich empfehle die Verwendung von pip anstelle von easy_install . Mit pip können Sie alle installierten Pakete und deren Versionen mit auflisten 

pip freeze

In den meisten Linux-Systemen können Sie dies an grep weiterleiten, um die Zeile für das jeweilige Paket zu finden, das Sie interessiert:

$ pip freeze | grep lxml
lxml==2.3

Für ein einzelnes Modul können Sie das __version__-Attribut versuchen. Es gibt jedoch Module ohne es:

$ python -c "import requests; print(requests.__version__)"
2.14.2
$ python -c "import lxml; print(lxml.__version__)"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
AttributeError: 'module' object has no attribute '__version__'

Da den Befehlen in Ihrer Frage Sudo das Präfix vorangestellt ist, werden Sie in der globalen Python-Umgebung installiert. Wir empfehlen Ihnen dringend, einen Blick in Python virtuelle Umgebung Manager zu werfen, virtualenvwrapper

473
alko

Du kannst es versuchen 

>>> import statlib
>>> print statlib.__version__

>>> import construct
>>> print contruct.__version__
285
damienfrancois

Verwenden Sie das pkg_resources-Modul, das in der setuptools-Bibliothek enthalten ist. Beachten Sie, dass die Zeichenfolge, die Sie an die get_distribution-Methode übergeben, dem PyPI-Eintrag entsprechen sollte.

>>> import pkg_resources
>>> pkg_resources.get_distribution("construct").version
'2.5.2'

und wenn Sie es von der Befehlszeile aus ausführen möchten, können Sie Folgendes tun:

python -c "import pkg_resources; print(pkg_resources.get_distribution('construct').version)"

Beachten Sie, dass die Zeichenfolge, die Sie an die get_distribution-Methode übergeben, der in PyPI registrierte Paketname sein muss, nicht der Modulname, den Sie importieren möchten. 

Leider sind diese nicht immer gleich (beispielsweise pip install memcached, aber import memcache).

130
jkukul

Ich denke, das kann helfen, aber zuerst das Paket show installieren, um pip show auszuführen, und dann show verwenden, um die Version zu finden!

Sudo pip install show
# in order to get package version execute the below command
Sudo pip show YOUR_PACKAGE_NAME | grep Version
79
aabdulwahed

Der bessere Weg, das zu tun, ist:


Für die Details eines bestimmten Pakets

pip show <package_name>

Darin werden Paketname, Version, Autor, Ort usw. aufgeführt.


$ pip show numpy
Name: numpy
Version: 1.13.3
Summary: NumPy: array processing for numbers, strings, records, and objects.
Home-page: http://www.numpy.org
Author: NumPy Developers
Author-email: [email protected]
License: BSD
Location: c:\users\prowinjvm\appdata\local\programs\python\python36\lib\site-packages
Requires:

Für mehr Details: >>> pip help


pip sollte zu diesem Zweck aktualisiert werden.

pip install --upgrade pip

Der empfohlene Befehl unter Windows lautet: 

python -m pip install --upgrade pip

39
susan097

In Python3 mit Klammern um den Druck

>>> import celery
>>> print(celery.__version__)
3.1.14
30
user224767

module.__version__ ist ein guter erster Versuch, aber es funktioniert nicht immer.

Wenn Sie kein Shell-Out durchführen möchten und Pip 8 oder 9 verwenden, können Sie weiterhin pip.get_installed_distributions() verwenden, um Versionen in Python abzurufen:

update: Die Lösung funktioniert in Pip 8 und 9, aber in Pip 10 wurde die Funktion von pip.get_installed_distributions nach pip._internal.utils.misc.get_installed_distributions verschoben, um explizit darauf hinzuweisen, dass sie nicht für die externe Verwendung bestimmt ist. Es ist keine gute Idee, sich darauf zu verlassen, wenn Sie Pip 10+ verwenden.

import pip

pip.get_installed_distributions()  # -> [distribute 0.6.16 (...), ...]

[
    pkg.key + ': ' + pkg.version
    for pkg in pip.get_installed_distributions()
    if pkg.key in ['setuptools', 'statlib', 'construct']
] # -> nicely filtered list of ['setuptools: 3.3', ...]
17
waterproof

Die vorherigen Antworten haben mein Problem nicht gelöst, aber dieser Code hat Folgendes getan:

import sys 
for name, module in sorted(sys.modules.items()): 
  if hasattr(module, '__version__'): 
    print name, module.__version__ 
14
tashuhka

fügen Sie zuerst Python, Pip zu Ihren Umgebungsvariablen hinzu. damit Sie Ihre Befehle von der Eingabeaufforderung ausführen können. dann gib einfach python befehl. Importieren Sie dann das Paket

-> import scrapy

dann den Versionsnamen ausdrucken

-> print(scrapy.__version__)

Das wird auf jeden Fall funktionieren

6
suraj garla

Wenn die obigen Methoden nicht funktionieren, sollten Sie Folgendes in Python versuchen:

import modulename

modulename.version
modulename.version_info

Siehe Python-Tornado-Version abrufen?

Beachten Sie, der .version arbeitete für mich neben Tornado auch für ein paar andere.

5
D Adams

Einige Module verfügen nicht über das Attribut __version__. Die einfachste Möglichkeit ist das Einchecken im Terminal: pip list

4
Yuchao Jiang

Wenn Sie Python installieren, erhalten Sie auch den Python-Paketmanager pip. Sie können pip verwenden, um die Versionen von Python-Modulen abzurufen. Wenn Sie alle installierten Python-Module mit ihren Versionsnummern auflisten möchten, verwenden Sie den folgenden Befehl:

$ pip freeze

Sie erhalten die Ausgabe:

asn1crypto==0.22.0
astroid==1.5.2
attrs==16.3.0
Automat==0.5.0
backports.functools-lru-cache==1.3
cffi==1.10.0
...

Um die Versionsnummer einzeln zu finden, können Sie diese Ausgabe auf * NIX-Maschinen aufrufen. Zum Beispiel:

$ pip freeze | grep PyMySQL

PyMySQL == 0.7.11 Unter Windows können Sie findstr anstelle von grep verwenden. Zum Beispiel:

PS C:\> pip freeze | findstr PyMySql

PyMySQL == 0,7.11

Wenn Sie die Version eines Moduls in einem Python-Skript erfahren möchten, können Sie das __version__-Attribut des Moduls verwenden, um sie zu erhalten. Beachten Sie, dass nicht alle Module mit einem __version__-Attribut geliefert werden. Zum Beispiel,

>>> import pylint
>>> pylint.__version__
'1.7.1'
3
Sonia Rani

Angenommen, wir verwenden Jupyter Notebook (wenn Sie Terminal verwenden, lassen Sie die Ausrufezeichen fallen):

1) wenn das Paket (z. B. xgboost) mit pip installiert wurde:

!pip show xgboost
!pip freeze | grep xgboost
!pip list | grep xgboost

2) wenn das Paket (z. B. caffe) mit conda installiert wurde:

!conda list caffe
2
user10429366

Verwenden Siedir(), um herauszufinden, ob das Modul überhaupt ein__version__-Attribut hat.

>>> import Selenium
>>> dir(Selenium)
['__builtins__', '__doc__', '__file__', '__name__',
 '__package__', '__path__', '__version__']
>>> Selenium.__version__
'3.141.0'
>>> Selenium.__path__
['/venv/local/lib/python2.7/site-packages/Selenium']
2
jturi

Sie können importlib_metadata library dafür verwenden.

Wenn Sie mit Python <3.8 arbeiten, installieren Sie es zuerst mit:

pip install importlib_metadata

Seit Python 3.8 ist es in der Standardbibliothek enthalten.

Führen Sie dann zur Überprüfung der Paketversion (in diesem Beispiel lxml) Folgendes aus:

>>> from importlib_metadata import version
>>> version('lxml')
'4.3.1'

Beachten Sie, dass dies nur für Pakete funktioniert, die von PyPI installiert werden. Außerdem müssen Sie einen Paketnamen als Argument an die version-Methode übergeben, nicht als einen Modulnamen, den dieses Paket bereitstellt (obwohl diese normalerweise gleich sind).

1
jkukul

Schnelles python Programm, um alle Pakete aufzulisten (Sie können es nach 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
1
Yarh

So rufen Sie eine Liste von Nicht-Standardmodulen (Pipmodulen) ab, 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 aus Wie werden importierte Module aufgelistet?

1
Tobias Bleisch

Dies funktioniert auch in Jupyter Notebook unter Windows! Solange Jupyter von einer bash-kompatiblen Befehlszeile wie Git Bash (MingW64) gestartet wird, können die in vielen Antworten angegebenen Lösungen in Jupyter Notebook auf Windows-Systemen mit einem kleinen Tweak verwendet werden. 

Ich verwende Windows 10 Pro mit Python, das über Anaconda installiert ist. Der folgende Code funktioniert, wenn ich Jupyter über Git Bash starte (aber nicht, wenn ich von der Anaconda-Eingabeaufforderung starte).

Der Tweak: Fügen Sie vor pip ein Ausrufezeichen (!) ein, um daraus !pip zu werden.

>>>!pip show lxml | grep Version
Version: 4.1.0

>>>!pip freeze | grep lxml
lxml==4.1.0

>>>!pip list | grep lxml
lxml                               4.1.0                  

>>>!pip show lxml
Name: lxml
Version: 4.1.0
Summary: Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API.
Home-page: http://lxml.de/
Author: lxml dev team
Author-email: [email protected]
License: BSD
Location: c:\users\karls\anaconda2\lib\site-packages
Requires: 
Required-by: jupyter-contrib-nbextensions
0
Karl Baker

Suchen Sie nach einem lokalen Installationsverzeichnis (in den meisten Fällen Site-Packages), und der Autor sollte dort ein paar einfache Informationen finden.

0
Gary

(Siehe auch https://stackoverflow.com/a/56912280/7262247 )

Ich fand es ziemlich unzuverlässig, die verschiedenen verfügbaren Werkzeuge zu verwenden (einschließlich des von Jakub Kukuls Antwort ) erwähnten besten pkg_resources, wie die meisten von ihnen nicht alle Fälle abdecken . Zum Beispiel

  • eingebaute Module
  • module nicht installiert, sondern nur zum Pfad python hinzugefügt (z. B. von Ihrem IDE)
  • zwei Versionen desselben Moduls verfügbar (eine im Pfad python ersetzt die installierte)

Da wir einen zuverlässigen Weg brauchten, um die Version von jedem Paket, Modul oder Submodul zu erhalten, schrieb ich getversion . Es ist ganz einfach zu bedienen:

from getversion import get_module_version
import foo
version, details = get_module_version(foo)

Einzelheiten finden Sie in der Dokumentation .

0
smarie

Aufbauend auf Jakub Kukuls Antwort Ich habe einen zuverlässigeren Weg gefunden, um dieses Problem zu lösen.

Das Hauptproblem dieses Ansatzes besteht darin, dass die Pakete "konventionell" installiert werden müssen (und dies beinhaltet nicht die Verwendung von pip install --user) oder sich bei der Python -Initialisierung im System-PATH befinden müssen.

Um das zu umgehen, können Sie pkg_resources.find_distributions(path_to_search) verwenden. Dabei wird grundsätzlich nach Distributionen gesucht, die importiert werden könnten, wenn path_to_search im System PATH enthalten wäre.

Wir können diesen Generator folgendermaßen durchlaufen:

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

Dies gibt ein Wörterbuch mit Modulen als Schlüssel und deren Version als Wert zurück. Dieser Ansatz kann auf weit mehr als die Versionsnummer erweitert werden.

Vielen Dank an Jakub Kukul für den Hinweis in die richtige Richtung

0
Alessio Arena

Sie können diesen Befehl in der Eingabeaufforderung verwenden

pip show Modulename

beispiel: pip show xlrd

sie erhalten so eine Ausgabe mit allen Details.

Name: xlrd
Version: 1.2.0
Summary: Library for developers to extract data from Microsoft Excel (tm) spreadsheet files
Home-page: http://www.python-Excel.org/
Author: John Machin
Author-email: [email protected]
License: BSD
Location: c:\users\rohit.chaurasiya\appdata\local\programs\python\python37\lib\site-packages
Requires:
Required-by:
0