Pythonモジュールのバージョンを確認する方法は?


685

私はpythonモジュールをインストール:constructstatlibsetuptools、このように:

# 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

(プログラムで)バージョンを確認できるようにしたい。python --versionコマンドラインから実行できるものと同等のものはありますか?

私のpythonバージョンは2.7.3です。




12
コマンド・ライン・ソリューションによって、興味のある方のために、使用:pip list
KrisWebDev

回答:


726

easy_installの代わりにpipを使用することをお勧めします。pipを使用すると、インストールされているすべてのパッケージとそのバージョンを

pip freeze

ほとんどのLinuxシステムでは、これをパイプしてgrep(またはfindstrWindowsで)、興味のある特定のパッケージの行を見つけることができます。

Linux:
$ pip freeze | grep lxml
lxml==2.3

Windows:
c:\> pip freeze | findstr lxml
lxml==2.3

個々のモジュールについては、 __version__属性ないモジュールもあります:

$ 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__'

最後に、質問のコマンドの先頭にが付いてsudoいるため、グローバルPython環境にインストールしているようです。virtualenvwrapperなどのPython 仮想環境マネージャーを確認することを強くお勧めします


18
以下の回答が提案されましたpip show lxml | grep Version。単一のパッケージのみを検査するため、これははるかに高速に実行されます。
Jonathan Vanasco 14

12
完全をpip list | grep lxml
期す

3
Windowsシステムではどうですか?grepウィンドウには何がありますか?ピップフリーズ以来| grep lxmlはwindwosでは機能しません。
レイヴンチューク

4
@RavenCheukの使用pip list | findstr lxml
Alex F

2
findを使用したWindowsバリアント(1文字短い...):pipリスト| 「lxml」を検索
ジョーダンステファネッリ

366

あなたが試すことができます

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

>>> import construct
>>> print contruct.__version__

59
一部の一般的なライブラリの一部のバージョン(などinspect)には__version__、残念ながら属性がありません。
e 14

5
PySerialにはがありserial.VERSIONます。たぶん、PEP 0396に準拠し
Sussch

6
多くのモジュールにバージョン
sdaffa23fdsf

1
@ sdaffa23fdsfどのモジュールにバージョンがないのですか?シリアル、検査、PyQt、SQLite以上のものですか?pycmakeを参照してください。
PAL GD

4
print(contruct.__version__)Python 3. *を使用している場合
jacanterbury

216

ライブラリpkg_resourcesと一緒に配布されたモジュールを使用しsetuptoolsます。get_distributionメソッドに渡す文字列はPyPIエントリに対応している必要があります。

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

コマンドラインから実行する場合は、次のようにします。

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

get_distributionメソッドに渡す文字列は、インポートしようとしているモジュール名ではなく、PyPIに登録されているパッケージ名である必要があります。

残念ながら、これらは常に同じであるとは限りません(たとえばpip install memcached、がそうですimport memcache)。


19
これは、モジュールに属性がない場合でも機能します__version__
2015年

これはどうですか?construct.version.full_version
MKatleast3

8
一番の答えになるはずです。これが、パッケージのバージョン(ある場合)を取得する唯一の信頼できる方法です
henryJack

7
pkg_resources.get_distrinbution常に動作するとは限らないことに注意してください。DistributionNotFound「 'the_package_name'ディストリビューションが見つからなかったため、アプリケーションで必要です」などのエラーメッセージでいくつかの例外が発行されます
mjv

2
@mjvエラーが発生する可能性が最も高いのは、1)パッケージがインストールされていない2)get_distributionメソッドにパッケージ名ではなくモジュール名を渡している
Jakub Kukul

96

これは役立つと思いますが、最初にshowパッケージをインストールして実行しpip show、次にshowを使用してバージョンを確認します!

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

2
ここに喜びはありません!pip: error: No command by the name pip show (maybe you meant "pip install show")
Sam Finnigan、2015

この回答は、シェルからパッケージバージョンが必要な場合にのみ適しています。Python内で必要な場合、これはかなり悪いハックになるでしょう。とにかく、次のコマンドを使用してバージョンを抽出できますpip show PACKAGE | awk '/^Version: / {sub("^Version: ", ""); print}'。おそらく、より単純なAWKスクリプトで済む可能性がありますが、前述の方法はすべてのエッジケースに対して安全です。
6

3
@SamFinnigan pip showpip 1.2.1.post1で実装されました。あなたはひどく古いバージョンのpipを使用しているので、問題があるのも不思議ではありません!現在、pip 7.1.2を実行しています。何かが更新を妨げている場合は、いつでもローカルまたはvirtualenvにインストールできます。
6

おかげで私のために働いています。一部のパッケージには.__ version__パラメータがないため、より便利です。
Salih Karagoz

出力に矛盾が生じているようです:>> print(sklearn .__ version__)#returns 0.20.3 >> pip show sklearn #return 0.0; 明確にできますか?
Sumanth Lazarus

76

これを行うためのより良い方法は次のとおりです。


特定のパッケージの詳細について

pip show <package_name>

Package_name、Version、Author、Locationなどの詳細を示します。


$ 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: numpy-discussion@python.org
License: BSD
Location: c:\users\prowinjvm\appdata\local\programs\python\python36\lib\site-packages
Requires:

詳細については: >>> pip help


pip これを行うには更新する必要があります。

pip install --upgrade pip

Windowsでは、次のコマンドをお勧めします。

python -m pip install --upgrade pip


出力に矛盾が生じているようです:>> print(sklearn .__ version__)#returns 0.20.3 >> pip show sklearn #return 0.0; 明確にできますか?
Sumanth Lazarus

1
pip show scikit-learn代わりに使用する必要がありますpip show sklearn。sklearnは、インポート時に使用される短い形式で、直接認識しないpipので、scikit-learnある完全なパッケージがない学ぶsklearn
susan097

42

python3で、かっこ付きで印刷

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

30
すべてのパッケージに__version__属性があるわけではありません。
Spedwards

この答えはpython 3に対するものです-これは別の言語です。ただし、Python 2でこの回答を使用できます。そのためには、他のステートメントの前に"from future import print_function" という行を追加する必要があります。
user1976 2016年

1
@ user1976これはPython 2でも有効な構文です。括弧はprint、の(2)+(3)評価のように、への引数の周囲で単に許容され5ます。かっこ内にコンマがあると、少し面白くなるかもしれませんが、の場合は、なんとかprintして機能します。
Tripleee

22

module.__version__ 最初に試すことをお勧めしますが、常に機能するとは限りません。

シェルアウトしたくなく、pip 8または9を使用pip.get_installed_distributions()している場合でも、Python内からバージョンを取得するために使用できます。

:アップデート ソリューションはここピップ8および9で動作しますが、ピップ10に関数がから移動されているpip.get_installed_distributionspip._internal.utils.misc.get_installed_distributions明示的にそれは外部の使用のためではないということを示しています。pip 10+を使用している場合は、これに依存することはお勧めできません。

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', ...]

1
はい、すべてのパッケージ作成者がバージョンを設定するわけではありませんが、を使用している場合pip、これは常に機能するはずです。
防水

2
残念ながら、この解決策は実行可能ではありません。PipはインプロセスAPIを保証せず、コマンドラインを介したAPIのみを保証します。このアプローチは、もはやピップ10上で動作していない
ジェイソンR.クームスは、

16

以前の答えは私の問題を解決しませんでしたが、このコードは:

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

2
これ__version__は、定義されていない場合に印刷を試みるのを避けるだけです。がない場合__version__、目的のパッケージの結果は得られません。
tripleee 2016

モジュールに__version__標準の属性(python.org/dev/peps/pep-0396/#specification)がない場合、手動で調査しないと、バージョンがどこにどのように含まれているかを知ることはできません。
tashuhka 2017

12

importlib_metadataこれにはライブラリを使用できます。

pythonを使用している場合は<3.8、まず次のコマンドでインストールします。

pip install importlib_metadata

Python以降3.8、標準ライブラリに含まれています。

次に、パッケージのバージョン(この例ではlxml)を確認するには、次のコマンドを実行します。

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

これはPyPIからインストールされたパッケージに対してのみ機能することに注意してください。また、versionこのパッケージが提供するモジュール名ではなく、メソッドに引数としてパッケージ名を渡す必要があります(通常は同じですが)。


12

dir()モジュールに__version__属性があるかどうかを調べるために使用します。

>>> 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']

まさに私はセレンバージョンを探しました-そして魔法のようにここに私たちはそれを持っています!Python3で動作するので、うまくいきました!
pbaranski

これは堅牢なソリューションに最も近い
Dアダムス

6

上記の方法が機能しない場合は、Pythonで次の方法を試してみる価値があります。

import modulename

modulename.version
modulename.version_info

Get Python Tornado Version?を参照してください

注、.version竜巻以外のいくつかの他のものでも私のために働いた。


6

まず、環境変数にpython、pipを追加します。コマンドプロンプトからコマンドを実行できるようにします。次に、単純にpythonコマンドを入力します。次にパッケージをインポートします

->import scrapy

次にバージョン名を出力します

->print(scrapy.__version__)

これは間違いなく動作します


2
ここで何度か説明したように、すべてのモジュールが__version__属性を提供するわけではありません。
reox 2018年

pip freeze<package> .__ version_が機能するにもかかわらず、表示されないパッケージを見つけました。投稿いただきありがとうございます。
ティモシーC.クイン

6

Jupyter Notebookを使用していると仮定します(ターミナルを使用している場合は感嘆符をドロップします):

1)パッケージ(例:xgboost)がpipでインストールされた場合:

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

2)パッケージ(caffeなど)がcondaでインストールされた場合

!conda list caffe

5

一部のモジュールには__version__属性がないため、最も簡単な方法はターミナルをチェックインすることです:pip list


5

Python 3.8バージョンでは、パッケージに新しいmetadataモジュールがありimportlib、それもそれを行うことができます。

これはドキュメントの例です:

>>> from importlib.metadata import version
>>> version('requests')
'2.22.0'

このメソッドには、バージョン属性が定義されていない場合に機能するという利点があります。
デレクソン

3

pythonターミナルでシェルを開いて(興味のあるpythonバージョンで)、ライブラリをインポートして、その__version__属性を取得することをお勧めします。

>>> import statlib
>>> statlib.__version__

>>> import construct
>>> contruct.__version__

注1:Pythonバージョンを考慮する必要があります。異なるバージョンのpythonをインストールした場合は、対象のpythonバージョンでターミナルを開く必要があります。たとえば、python3.8canでターミナルを開くと、(python3.5またはで開くのとは異なるバージョンのライブラリが表示されpython2.7ます)。

注2:私たちは、使用を避けるprint機能をその行動がpython2かのpython3に依存するため、。端末には式の値が表示されます。


2

これはWindowsのJupyter Notebookでも機能します。JupyterがGit Bash(MingW64)などのbash準拠のコマンドラインから起動される限り、Windowsシステム上のJupyter Notebookで1つの小さな調整を行うことで、多くの回答で提供されるソリューションを使用できます。

Anacondaを介してPythonがインストールされたWindows 10 Proを実行しています。GitBashを介してJupyterを起動すると、次のコードが機能します(ただし、Anacondaプロンプトから起動すると機能しません)。

微調整:感嘆符を(追加!の前に)pipそれを作るために!pip

>>>!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: lxml-dev@lxml.de
License: BSD
Location: c:\users\karls\anaconda2\lib\site-packages
Requires: 
Required-by: jupyter-contrib-nbextensions

2

すべてのパッケージをリストする簡単なpythonプログラム(それをrequirements.txtにコピーできます

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)

出力は次のようになります。

asn1crypto~=0.24.0
attrs~=18.2.0
automat~=0.7.0
beautifulsoup4~=4.7.1
botocore~=1.12.98

2

https://stackoverflow.com/a/56912280/7262247参照

利用可能なさまざまなツール(Jakub Kukulの回答でpkg_resources述べられている最良のツールを含む)を使用することは、ほとんどのケースに対応しているわけではないため、まったく信頼できません。例えば

  • 組み込みモジュール
  • モジュールはインストールされていませんが、Pythonパスに追加されています(たとえばIDEによって)
  • 同じモジュールの2つのバージョンが利用可能(Pythonパスに1つがインストールされているものに優先)

我々はのバージョンを取得するために信頼性の高い方法必要なのでどんなパッケージ、モジュールまたはサブモジュールを、私は書いてしまったバージョンの取得を。使い方はとても簡単です:

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

詳細については、ドキュメントを参照してください。


1

現在のモジュールにインポートされている非標準(pip)モジュールのリストを取得するには:

[{pkg.key : pkg.version} for pkg in pip.get_installed_distributions() 
   if pkg.key in set(sys.modules) & set(globals())]

結果:

>>> 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'}]

注意:

このコードは、このページとインポートされたモジュールをリストする方法の両方のソリューションからまとめられました


1

要約すれば:

conda list   

(バージョンの詳細とともにすべてのライブラリを提供します)。

そして:

pip show tensorflow

(完全なライブラリの詳細を示します)。


0

Jakub Kukulの答えに基づいて、この問題を解決するより信頼できる方法を見つけました。

このアプローチの主な問題は、パッケージを「従来どおり」インストールする必要があることです(これには、 pip install --user)、またはPythonの初期化時にシステムPATHにある必要があることです。

あなたはそれを回避するために使うことができますpkg_resources.find_distributions(path_to_search)。これは基本的path_to_searchに、システムPATHにある場合にインポート可能なディストリビューションを検索します。

このジェネレーターを次のように反復できます。

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

これは、モジュールをキーとして、バージョンを値として持つ辞書を返します。このアプローチは、バージョン番号以上に拡張できます。

正しい方向を指示してくれたJakub Kukulに感謝


0

Windowsユーザー向けにこの回答を書きます。他のすべての回答で提案されているように、ステートメントは次のように使用できます。

import [type the module name]
print(module.__version__)      # module + '.' + double underscore + version + double underscore

ただし、上記の方法を使用してもバージョンが表示されないモジュールもあります。したがって、簡単にできることは次のとおりです。

  1. コマンドプロンプトを開きます。
  2. pythonとすべてのサポートモジュールをインストールしたままにしたcd [ file address ] を使用して、ファイルアドレス/ディレクトリに移動します。
  3. コマンド「pip install [モジュール名]」を使用して、Enter キーを押します。
  4. これにより、「要件は既に​​満たされています:ファイルアドレス\フォルダー名(バージョン付き)」というメッセージが表示されます
  5. 例については、下のスクリーンショットを参照してください。「Selenium-Screenshot」という名前のプリインストールされたモジュールのバージョンを知っている必要がありました。それは1.5.0として正しく表示されました:

コマンドプロンプトのスクリーンショット


0

あなたはこれを試すことができます:

pip list

これにより、すべてのパッケージとそのバージョンが出力されます。 出力


-1

最初にこのようなパッケージをインストールしてから、そのバージョンを確認できます

pip install package
import package
print(package.__version__)

それはあなたにパッケージバージョンを与えるはずです

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