pipでインストールされているパッケージのバージョンを確認する


709

pipを使用して、現在インストールされているパッケージのバージョンを確認することはできますか?

私は知ってpip install XYZ --upgradeいますが、何かあるのだろうかと思っていpip info XYZます。そうでない場合は、現在使用しているバージョンを確認するのに最適な方法は何ですか。


4
showpipにコマンドの提案があります:github.com/pypa/pip/issues/33
Hugo Tavares

回答:


1013

とおりピップ1.3、そこにあるpip showコマンド。

$ pip show Jinja2
---
Name: Jinja2
Version: 2.7.3
Location: /path/to/virtualenv/lib/python2.7/site-packages
Requires: markupsafe

古いバージョンでは、pip freezegrepうまく仕事をする必要があります。

$ pip freeze | grep Jinja2
Jinja2==2.7.3

8
@techtonik:現在のモジュールをrequirements.txtにフリーズするためのものです。
Hugo、

@Hugo:save名前を使用します。
anatly techtonik 2014

5
「フリーズ」の命名は歴史的です-それは少なくとも2008年にさかのぼります。当時、多くの人々はすでに「冷凍」ルビーの宝石に精通していたため、pipは当時広く使用されていた名前を借用しました。
AdamKG 2014

2
これは明白でも文書化もされていませんでしたが、予想していたpip show pipよりも、タイプしてpipのバージョン情報を取得できますpip --version
Marc Maxmeister 2016年

pip freezeには編集可能なVCSチェックアウトバージョンが正しく表示されるという利点がありますが、表示されpip showません。
spookylukey


43

Pip 1.3には、リストコマンドもあります。

$ pip list
argparse (1.2.1)
pip (1.5.1)
setuptools (2.1)
wsgiref (0.1.2)

パッケージ名がXであるとします。バージョンを確認するには-pipリストを使用することと、XをインポートしてからX .__ version__を実行することの違いは何ですか?両方のパッケージバージョンですか?
可変

どちらも有効ですが、pip list一般的なものであり、そうで__version__はありません。また、私は見ているversion()と、get_version()インポートされたいずれかの。
RickyA

35

--outdatedを追加の引数として使用すると、使用しているパッケージの最新バージョンと最新バージョンを取得できます。

$ 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)

AdamKGの答えと組み合わせると:

$ pip list --outdated | grep Jinja2
Jinja2 (Current: 2.6 Latest: 2.8)

pip-toolsも確認してください:https : //github.com/nvie/pip-tools


1
興味深いオプション。私はむしろそれらすべてを一覧にしたいと思っていますが、それらのいずれかが古くなっている場合は私に知らせてください。
ArtOfWarfare 14

17

インストールyolkして実行することもできyolk -lます。これにより、優れた出力が得られます。これが私の小さなvirtualenvで得られるものです:

(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 

9

grepコマンドを使用して調べることができます。

pip show <package_name>|grep Version

例:

pip show urllib3|grep Version

バージョンのみが表示されます。

Metadata-Version:2.0
バージョン:1.12


8

最も簡単な方法はこれです:

import jinja2
print jinja2.__version__

7
これ__version__は、ソースコードで定義されているパッケージでのみ機能します。多くのパッケージにはありません。
spookylukey

パッケージ化中にこのバージョンを含めることは良い方法ですか、それともsetup.pyファイルのバージョンパラメータにバージョンのみを含めることをお勧めしますか?
可変

この方法は、の予想される入力importとの出力の間のパッケージ名の不整合(少なくとも3つのタイプがある)に対しても堅牢ではありませんpip freeze
mirekphd

6

ツールもあります呼ばれるpip-checkあなたにインストールされているすべてのパッケージとその更新状況の概要を示します:

ここに画像の説明を入力してください

自分で使ったことはありません。それとこのSOの質問にすぐに偶然偶然遭遇しました、そしてそれが言及されなかったので...


Windows上でこれを実行する方法
ヴェラ

1
@vela Windowsでもまったく同じように機能すると思います。もちろん、他のシステムと同じように、最初にインストールする必要があります。
Ola Tuvesson

5

Windowsでは、次のようなコマンドを発行できます。

pip show setuptools | findstr "Version"

出力:

Version: 34.1.1

2

機械可読形式でパッケージバージョンのみを返すpython関数:

from importlib.metadata import version 
version('numpy')

Python 3.8より前:

pip install importlib-metadata 
from importlib_metadata import version
version('numpy')

同等のbash(ここでもpythonから呼び出されます)ははるかに複雑になります(ただし、より堅牢です-以下の注意を参照してください)。

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())

使用例:

# pkg_name="xgboost"
# pkg_name="Flask"
# pkg_name="Flask-Caching"
pkg_name="scikit-learn"

print(get_installed_ver(pkg_name))
>>> 0.22

なお、どちらの場合もpkg_nameで返される形式でパッケージ名が含まれている必要があり、パラメータpip freezeやなどの際に使用されていないimport、などscikit-learnではないsklearnFlask-Caching、ではありませんflask_caching

pip freezebashバージョンでの呼び出しは非効率に思えるかもしれませんが、このメソッドだけがパッケージの命名の特異性と不整合(たとえば、アンダースコアとダッシュ、スモールとラージキャップ、sklearnvs などの省略形scikit-learn)に対して十分に堅牢であることがわかります。

注意:複雑な環境では、両方のバリアントが予期しないバージョン番号を返す可能性があり、実際に取得できる内容と一致しませんimport

このような問題の1つは、ユーザーの site-packagesサブフォルダーにパッケージの他のバージョンが隠されている場合に発生します。version()ここで私が遭遇した状況を使用することの危険の例として:

$ 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

別の問題は、同じ環境にcondaでインストールされたいくつかのパッケージがあることです。pipでインストールされたパッケージと依存関係を共有し、これらの依存関係のバージョンが異なる場合、pipでインストールされた依存関係のダウングレードが発生する可能性があります。

numpyたとえば、2020年4月1日のPyPI で利用可能なの最新バージョンは1.18.0でしたが、同時にアナコンダのconda-forgeチャネルにはnumpy最新バージョンとして1.17.3しかありませんでした。そのためbasemap、conda(2番目)を使用してパッケージをインストールすると、以前にpipでインストールされたパッケージがconda numpyによって1.17.3にダウングレードされ、バージョン1.18.0がimport機能で使用できなくなります。この場合version()は正しいでしょうpip freeze/ conda list間違っています:

$ 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

1
なぜ使用しないのimportlib.metadata.version('NameOfProject')ですか?docs.python.org/3/library/...
sinoroc

1
@sinorocを見つけてください!私はあなたが答えとしてそれを投稿するべきだと思います、そして私は私のかなり設計されたものを削除します:)サンプルPoC: from importlib_metadata import version; version('Flask-Caching')
mirekphd

1
私はあなたにそれを手放します
sinoroc

あなたの最新の編集は私を驚かせます。やってみpython -c "import pkg_resources; print(pkg_resources.get_distribution('lightgbm').version)"ませんか?
sinoroc

それはあなたに正しい答えを与えます-インストールされた最新バージョン(2.3.1)がversion()まだ最も古い(最も古い)バージョン(2.2.3)を返します。--userスイッチで両方のバージョンをインストールすることでこの結果を複製できlightgbm-2.2.3.dist-infoますが、上記のように、フォルダーを手動で保持して、両方を一緒に保持します(通常、pipはそれを削除します-削除しない限り)。
mirekphd

1

pip showは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:

標準的な答えではありません。
hamed baziyad

1

Pythonコードを使用してこれを行うには:

使用する importlib.metadata.version

Python≥3.8

import importlib.metadata
importlib.metadata.version('beautifulsoup4')
'4.9.1'

Python≤3.7

(を使用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')>

sinorocmirekphdによるコメントにクレジットされます。


0

Windowsの場合

  1. cmdを開いてpythonと入力し、Enterキーを押します。

  2. インポートを入力してEnterキーを押します。

  3. ._version__と入力し、Enterキーを押します。

ここのスクリーンショットでわかるように、私はこの方法を使用してシリアルモジュールのバージョンを確認しています。

画像



0

問題は、どのOSユーザーが使用しているかは記載されていない(Windows / Linux / Mac)

MacとLinuxで問題なく動作するいくつかの答えがあるので。

以下のコマンドは、ユーザーがWindowsでPythonパッケージのバージョンを見つけようとしている場合に使用できます。

PowerShellでは、次のコマンドを使用します。

pip list | findstr <PackageName>

例:- pip list | findstr requests

出力: requests 2.18.4

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.