Antworten:
Ab Pip 1.3 gibt es einen pip show
Befehl.
$ pip show Jinja2
---
Name: Jinja2
Version: 2.7.3
Location: /path/to/virtualenv/lib/python2.7/site-packages
Requires: markupsafe
In älteren Versionen pip freeze
und grep
sollte den Job gut machen.
$ pip freeze | grep Jinja2
Jinja2==2.7.3
save
Name verwenden.
pip show pip
, um die Versionsinformationen von pip zu erhalten, anstatt pip --version
wie erwartet.
pip freeze
hat den Vorteil, dass bearbeitbare VCS-Checkout-Versionen korrekt angezeigt werden, dies pip show
jedoch 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 list
generisch 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 yolk
und dann ausführen, yolk -l
was 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.
import
und der Ausgabe von pip freeze
.
Es gibt auch ein Tool namens, pip-check
das 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_name
Parameter in beiden Fällen den Paketnamen in dem Format enthalten sollte, das von zurückgegeben pip freeze
und nicht verwendet wird import
, z. B. scikit-learn
nicht sklearn
oder Flask-Caching
nicht flask_caching
.
Beachten Sie, dass das Aufrufen pip freeze
in 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 sklearn
vs 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 numpy
PyPI am 04-01-2020 1.18.0, während gleichzeitig Anacondas conda-forge
Kanal nur die Version 1.17.3 numpy
als neueste Version hatte . Wenn Sie also ein basemap
Paket mit conda (als zweites) installiert haben, wird Ihre zuvor numpy
per Pip installierte Version von conda auf 1.17.3 herabgestuft, und Version 1.18.0 ist für die import
Funktion nicht mehr verfügbar . In diesem Fall version()
wäre richtig und pip freeze
/ oder conda list
falsch:
$ 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 --user
Switch installieren , aber den lightgbm-2.2.3.dist-info
Ordner 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.version
import 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.Distribution
import 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
show
Befehl in pip: github.com/pypa/pip/issues/33