Antworten:
Ab Pip 1.3 gibt es einen pip showBefehl.
$ pip show Jinja2
---
Name: Jinja2
Version: 2.7.3
Location: /path/to/virtualenv/lib/python2.7/site-packages
Requires: markupsafe
In älteren Versionen pip freezeund grepsollte den Job gut machen.
$ pip freeze | grep Jinja2
Jinja2==2.7.3
saveName verwenden.
pip show pip, um die Versionsinformationen von pip zu erhalten, anstatt pip --versionwie erwartet.
pip freezehat den Vorteil, dass bearbeitbare VCS-Checkout-Versionen korrekt angezeigt werden, dies pip showjedoch nicht.
Ich habe gerade eine Pull-Anfrage in Pip mit der Verbesserung gesendet, die Hugo Tavares sagte:
(Specloud als Beispiel)
$ pip show specloud
Package: specloud
Version: 0.4.4
Requires:
nose
figleaf
pinocchio
Pip 1.3 hat jetzt auch einen Listenbefehl :
$ pip list
argparse (1.2.1)
pip (1.5.1)
setuptools (2.1)
wsgiref (0.1.2)
pip listgenerisch und __version__nicht. Ich habe auch gesehen version()und get_version()für die importierte.
und mit --outdated als zusätzlichem Argument erhalten Sie die aktuelle und die neueste Version der von Ihnen verwendeten Pakete:
$ pip list --outdated
distribute (Current: 0.6.34 Latest: 0.7.3)
django-bootstrap3 (Current: 1.1.0 Latest: 4.3.0)
Django (Current: 1.5.4 Latest: 1.6.4)
Jinja2 (Current: 2.6 Latest: 2.8)
Kombinieren Sie also mit der Antwort von AdamKG:
$ pip list --outdated | grep Jinja2
Jinja2 (Current: 2.6 Latest: 2.8)
Überprüfen Sie auch die Pip-Tools : https://github.com/nvie/pip-tools
Sie können auch installieren yolkund dann ausführen, yolk -lwas auch eine schöne Ausgabe liefert. Folgendes bekomme ich für meine kleine virtuelle Umgebung:
(venv)CWD> /space/vhosts/pyramid.xcode.com/venv/build/unittest
project@pyramid 43> yolk -l
Chameleon - 2.8.2 - active
Jinja2 - 2.6 - active
Mako - 0.7.0 - active
MarkupSafe - 0.15 - active
PasteDeploy - 1.5.0 - active
Pygments - 1.5 - active
Python - 2.7.3 - active development (/usr/lib/python2.7/lib-dynload)
SQLAlchemy - 0.7.6 - active
WebOb - 1.2b3 - active
account - 0.0 - active development (/space/vhosts/pyramid.xcode.com/project/account)
distribute - 0.6.19 - active
egenix-mx-base - 3.2.3 - active
ipython - 0.12 - active
logilab-astng - 0.23.1 - active
logilab-common - 0.57.1 - active
nose - 1.1.2 - active
pbkdf2 - 1.3 - active
pip - 1.0.2 - active
pyScss - 1.1.3 - active
pycrypto - 2.5 - active
pylint - 0.25.1 - active
pyramid-debugtoolbar - 1.0.1 - active
pyramid-tm - 0.4 - active
pyramid - 1.3 - active
repoze.lru - 0.5 - active
simplejson - 2.5.0 - active
transaction - 1.2.0 - active
translationstring - 1.1 - active
venusian - 1.0a3 - active
waitress - 0.8.1 - active
wsgiref - 0.1.2 - active development (/usr/lib/python2.7)
yolk - 0.4.3 - active
zope.deprecation - 3.5.1 - active
zope.interface - 3.8.0 - active
zope.sqlalchemy - 0.7 - active
Der einfachste Weg ist folgender:
import jinja2
print jinja2.__version__
__version__im Quellcode definiert wurden. Viele Pakete nicht.
importund der Ausgabe von pip freeze.
Es gibt auch ein Tool namens, pip-checkdas Ihnen einen schnellen Überblick über alle installierten Pakete und deren Aktualisierungsstatus gibt:
Ich habe es selbst nicht benutzt. bin nur darauf gestoßen und diese SO-Frage in schneller Folge, und da sie nicht erwähnt wurde ...
Die Python-Funktion gibt nur die Paketversion in einem maschinenlesbaren Format zurück:
from importlib.metadata import version
version('numpy')
Vor Python 3.8:
pip install importlib-metadata
from importlib_metadata import version
version('numpy')
Das Bash-Äquivalent (hier auch von Python aufgerufen) wäre viel komplexer (aber robuster - siehe Vorsicht unten):
import subprocess
def get_installed_ver(pkg_name):
bash_str="pip freeze | grep -w %s= | awk -F '==' {'print $2'} | tr -d '\n'" %(pkg_name)
return(subprocess.check_output(bash_str, shell=True).decode())
Beispielnutzung:
# pkg_name="xgboost"
# pkg_name="Flask"
# pkg_name="Flask-Caching"
pkg_name="scikit-learn"
print(get_installed_ver(pkg_name))
>>> 0.22
Beachten Sie, dass der pkg_nameParameter in beiden Fällen den Paketnamen in dem Format enthalten sollte, das von zurückgegeben pip freezeund nicht verwendet wird import, z. B. scikit-learnnicht sklearnoder Flask-Cachingnicht flask_caching.
Beachten Sie, dass das Aufrufen pip freezein der Bash-Version zwar ineffizient erscheint, sich jedoch nur diese Methode als ausreichend robust erweist, um Besonderheiten und Inkonsistenzen bei der Paketbenennung zu vermeiden (z. B. Unterstriche gegenüber Bindestrichen, Small- und Large-Caps und Abkürzungen wie sklearnvs scikit-learn).
Achtung: In komplexen Umgebungen können beide Varianten überraschende Versionsnummern zurückgeben, die nicht mit dem übereinstimmen, was Sie tatsächlich erhalten können import.
Ein solches Problem tritt auf, wenn andere Versionen des Pakets in einem Benutzerunterordner versteckt sind site-packages. Zur Veranschaulichung der Gefahren bei der Verwendung version()hier eine Situation, auf die ich gestoßen bin:
$ pip freeze | grep lightgbm
lightgbm==2.3.1
and
$ python -c "import lightgbm; print(lightgbm.__version__)"
2.3.1
vs.
$ python -c "from importlib_metadata import version; print(version(\"lightgbm\"))"
2.2.3
until you delete the subfolder with the old version (here 2.2.3) from the user folder (only one would normally be preserved by `pip` - the one installed as last with the `--user` switch):
$ ls /home/jovyan/.local/lib/python3.7/site-packages/lightgbm*
/home/jovyan/.local/lib/python3.7/site-packages/lightgbm-2.2.3.dist-info
/home/jovyan/.local/lib/python3.7/site-packages/lightgbm-2.3.1.dist-info
Ein weiteres Problem besteht darin, dass einige von Conda installierte Pakete in derselben Umgebung installiert sind. Wenn sie Abhängigkeiten mit Ihren von Pip installierten Paketen gemeinsam nutzen und sich die Versionen dieser Abhängigkeiten unterscheiden, erhalten Sie möglicherweise Downgrades Ihrer von Pip installierten Abhängigkeiten.
Zur Veranschaulichung war die neueste Version von numpyPyPI am 04-01-2020 1.18.0, während gleichzeitig Anacondas conda-forgeKanal nur die Version 1.17.3 numpyals neueste Version hatte . Wenn Sie also ein basemapPaket mit conda (als zweites) installiert haben, wird Ihre zuvor numpyper Pip installierte Version von conda auf 1.17.3 herabgestuft, und Version 1.18.0 ist für die importFunktion nicht mehr verfügbar . In diesem Fall version()wäre richtig und pip freeze/ oder conda listfalsch:
$ python -c "from importlib_metadata import version; print(version(\"numpy\"))"
1.17.3
$ python -c "import numpy; print(numpy.__version__)"
1.17.3
$ pip freeze | grep numpy
numpy==1.18.0
$ conda list | grep numpy
numpy 1.18.0 pypi_0 pypi
importlib.metadata.version('NameOfProject')? docs.python.org/3/library/…
from importlib_metadata import version; version('Flask-Caching')
python -c "import pkg_resources; print(pkg_resources.get_distribution('lightgbm').version)"?
version()immer noch die früheste (älteste) (2.2.3) zurückgegeben wird. Sie können dieses Ergebnis replizieren, indem Sie beide Versionen mit dem --userSwitch installieren , aber den lightgbm-2.2.3.dist-infoOrdner manuell beibehalten, um beide zusammen zu haben, wie oben aufgeführt (pip würde ihn normalerweise entfernen - bis dies nicht der Fall ist).
pip show funktioniert in Python 3.7:
pip show selenium
Name: selenium
Version: 4.0.0a3
Summary: Python bindings for Selenium
Home-page: https://github.com/SeleniumHQ/selenium/
Author: UNKNOWN
Author-email: UNKNOWN
License: Apache 2.0
Location: c:\python3.7\lib\site-packages\selenium-4.0.0a3-py3.7.egg
Requires: urllib3
Required-by:
So verwenden Sie Python-Code:
importlib.metadata.versionimport importlib.metadata
importlib.metadata.version('beautifulsoup4')
'4.9.1'
(mit importlib_metadata.version)
!pip install importlib-metadata
import importlib_metadata
importlib_metadata.version('beautifulsoup4')
'4.9.1'
pkg_resources.Distributionimport pkg_resources
pkg_resources.get_distribution('beautifulsoup4').version
'4.9.1'
pkg_resources.get_distribution('beautifulsoup4').parsed_version
<Version('4.9.1')>
Gutgeschrieben auf Kommentare von sinoroc und mirekphd .
Für Windows können Sie
Öffnen Sie cmd und geben Sie Python ein. Drücken Sie die Eingabetaste.
Geben Sie den Import ein und drücken Sie die Eingabetaste.
Geben Sie ._version__ ein und drücken Sie die Eingabetaste.
Wie Sie im Screenshot hier sehen können, verwende ich diese Methode zum Überprüfen der Version des seriellen Moduls.

In Frage wird nicht erwähnt, welches Betriebssystem Benutzer verwendet (Windows / Linux / Mac)
Da gibt es einige Antworten, die unter Mac und Linux einwandfrei funktionieren.
Der folgende Befehl kann verwendet werden, wenn der Benutzer versucht, die Version eines Python-Pakets unter Windows zu finden.
Verwenden Sie in PowerShell den folgenden Befehl:
pip list | findstr <PackageName>
Beispiel:- pip list | findstr requests
Ausgabe : requests 2.18.4
showBefehl in pip: github.com/pypa/pip/issues/33