Pythonでインストールされているすべてのパッケージとそのバージョンを一覧表示する方法は?


128

Pythonに、インストールされているすべてのパッケージとそのバージョンを一覧表示する方法はありますか?

中に入ってpython/Lib/site-packages、どのようなファイルやディレクトリが存在するかを確認できることはわかっていますが、これは非常に扱いにくいものです。npm listie npm-lsに似ているものを探しています。


回答:


196

pip installがあり、インストーラーツールでインストールされているパッケージを確認する場合は、次のように呼び出すだけです。

pip freeze

インストールされたパッケージのバージョン番号も含まれます。

更新

pipも更新されpip freeze、次の呼び出しと同じ出力が生成されます。

pip list

注意

からの出力pip listはフォーマットが異なるため、の出力を解析する(おそらくバージョン番号を取得する)シェルスクリプトがfreezeあり、スクリプトをに変更するlist場合は、解析コードを変更する必要があります。


9
IMHO彼らはpip listのエイリアスとして提供する必要がありますpip freeze。書くのpip freeze > requirements.txtは直感的ですが、そうではありませんpip freeze
jsalonen 2012年

3
WOW:最新バージョンのpipのドキュメントを調べたところ、pip-installer.orgpip list / en / latest / usage.html#pip - listが追加されているようです。つまり、これは実際にすでに導入されているものです。
jsalonen 2013

51

help('modules') あなたのためにそれをすべきです。

IPythonの場合:

In [1]: import                      #import press-TAB
Display all 631 possibilities? (y or n)
ANSI                   audiodev               markupbase
AptUrl                 audioop                markupsafe
ArgImagePlugin         avahi                  marshal
BaseHTTPServer         axi                    math
Bastion                base64                 md5
BdfFontFile            bdb                    mhlib
BmpImagePlugin         binascii               mimetools
BufrStubImagePlugin    binhex                 mimetypes
CDDB                   bisect                 mimify
CDROM                  bonobo                 mmap
CGIHTTPServer          brlapi                 mmkeys
Canvas                 bsddb                  modulefinder
CommandNotFound        butterfly              multifile
ConfigParser           bz2                    multiprocessing
ContainerIO            cPickle                musicbrainz2
Cookie                 cProfile               mutagen
Crypto                 cStringIO              mutex
CurImagePlugin         cairo                  mx
DLFCN                  calendar               netrc
DcxImagePlugin         cdrom                  new
Dialog                 cgi                    nis
DiscID                 cgitb                  nntplib
DistUpgrade            checkbox               ntpath

5
便利です!バージョンも見たいです。
jsalonen 2012年

4
問題は、バージョンを含めるための標準化された方法がないことだと思います...時々、その、Package.version()またはpackage.__version__package.verあるいは他の多くの可能性
Joran Beasley

Pythonのモットーは「それを行う唯一の方法がある」と思いました;)?
Ed Randall 14

3
@EdRandall、いいえ-「それを行う1つの明白な方法」です。常に明白な方法があります。また、正確な表現は次のとおりです。それを行うには、明白な方法が1つ(できれば1つだけ)ある必要があります。あなたがオランダ人でない限り、その方法は最初は明白ではないかもしれませんが。
rosuav

30

インストール済みのPythonディストリビューションに関する情報を取得し、そのためにcmdコンソールまたはターミナルを使用したくない場合は、Pythonコードを使用する場合は、次のコード(python 3.4でテスト済み)を使用できます。

import pip #needed to use the pip functions
for i in pip.get_installed_distributions(local_only=True):
    print(i)

pip.get_installed_distributions(local_only=True)関数呼び出しは、反復可能に返し、理由のために、ループと印刷機能に含まれる要素の反復可能に改行文字で区切られたプリントアウトされます(\n)。結果は(インストールされているディストリビューションに応じて)次のようになります。

cycler 0.9.0
decorator 4.0.4
ipykernel 4.1.0
ipython 4.0.0
ipython-genutils 0.1.0
ipywidgets 4.0.3
Jinja2 2.8
jsonschema 2.5.1
jupyter 1.0.0
jupyter-client 4.1.1
#... and so on...

4
@exhumaのコメントを拡張するには、pip 10を使用する必要があります。import pkg_resources [print(d.project_name)for d in pkg_resources.working_set]
Almenon

の状態はpkg_resourcesどうですか?これはAFAICRの一部ですsetuptools。ないpip。それが依存している場合にのみ常に利用可能であることを安全に想定できますか?setuptoolspip
exhuma

9

あなたが試すことができます:ヨーク

ヨークをインストールするには、次を試してください:

easy_install yolk

Yolkは、インストールされているPythonパッケージに関する情報を取得し、PyPI(Python Package Index)で利用可能なパッケージをクエリするためのPythonツールです。

どのパッケージがアクティブ、非アクティブ、または開発モードであるかを確認し、PyPIにクエリを実行することで、より新しいバージョンを利用できるかどうかを確認できます。


私は通常この時点でこのタスクにpipを使用していますが、distributeを追加する準備ができていない非常に古いプロジェクトがあり、このようなツールがそこにあったことを思い出しました。それが何と呼ばれていたのか思い出せませんでした...これだけでした!
meshantz 2013年

1
Python 3をサポートしていません(pipからインストールしただけでランタイムエラーが発生しました)
Ohad Cohen

9

これを新しいバージョンのpip(でテスト済みpip==10.0.1)で実行するには、次のコマンドを使用します。

from pip._internal.operations.freeze import freeze
for requirement in freeze(local_only=True):
    print(requirement)

内部pydoc pip._internalhelp(pip._internal)の状況はどうなっていますか?わかりました、pip .__ builtins_などでアクセスできません。pipリファレンスガイドも空白です。
MortenB 2018

1
残念ながらわかりません。呼ばれるの_internalも嫌いです。機能が公式に公開されていないようです。したがって、これは慎重に処理する必要があります。
exhuma 2018

8

コマンドラインから

python -c help('modules')

すべてのモジュールの表示、および特定のモジュールの表示に使用できます

python -c help('os')

以下のLinuxで動作します

python -c "help('os')"

5
これはWindowsで機能します。Linuxではエラーがスローされます:-bash: syntax error near unexpected token `('
AjayKumarBasuthkar

これはモジュールのバージョンを提供し
ません

5

はい!あなたはあなたのpythonパッケージマネージャとしてpipを使うべきです(http://pypi.python.org/pypi/pip

pipがインストールされたパッケージでは、

pip freeze

インストールされているすべてのパッケージが一覧表示されます。おそらくvirtualenvvirtualenvwrapperも使用しているはずです。あなたが新しいプロジェクトを始めるとき、あなたはすることができます

mkvirtualenv my_new_project

そして(そのvirtualenv内で)、

pip install all_your_stuff

この方法で、あなたがすることができworkon my_new_project、その後、pip freezeそのvirtualenvの/プロジェクトのために設置されているパッケージを確認してください。

例えば:

  ~  mkvirtualenv yo_dude
New python executable in yo_dude/bin/python
Installing setuptools............done.
Installing pip...............done.
virtualenvwrapper.user_scripts creating /Users/aaylward/dev/virtualenvs/yo_dude/bin/predeactivate
virtualenvwrapper.user_scripts creating /Users/aaylward/dev/virtualenvs/yo_dude/bin/postdeactivate
virtualenvwrapper.user_scripts creating /Users/aaylward/dev/virtualenvs/yo_dude/bin/preactivate
virtualenvwrapper.user_scripts creating /Users/aaylward/dev/virtualenvs/yo_dude/bin/postactivate
virtualenvwrapper.user_scripts creating /Users/aaylward/dev/virtualenvs/yo_dude/bin/get_env_details

(yo_dude)➜  ~  pip install django
Downloading/unpacking django
  Downloading Django-1.4.1.tar.gz (7.7Mb): 7.7Mb downloaded
  Running setup.py egg_info for package django

Installing collected packages: django
  Running setup.py install for django
    changing mode of build/scripts-2.7/django-admin.py from 644 to 755

    changing mode of /Users/aaylward/dev/virtualenvs/yo_dude/bin/django-admin.py to 755
Successfully installed django
Cleaning up...

(yo_dude)➜  ~  pip freeze
Django==1.4.1
wsgiref==0.1.2

(yo_dude)➜  ~  

または、requirements.pipファイルを含むpythonパッケージがある場合は、

mkvirtualenv my_awesome_project
pip install -r requirements.pip
pip freeze

トリックを行います


そうそう、私はvirtualenvをしばらく使ってきた。どうやっpipてこの方法で一緒に使えるかわからなかっただけです!
jsalonen 2012年

virtualenvグローバルサイトパッケージについては、を使用する必要がありますpip list --local
Ioannis Filippidis 2014

@johntexグローバルサイトパッケージを使用しないでください!
Andbdrew 14

グローバルサイトパッケージを使用すると非常に便利です。存在しない場合、オプションはにまったく存在しませんvirtualenv。私はそれらを使用しない理由を知りませんし、virtualenvあなたが望むなら孤立に制限することを誰も妨げません。
イオアニスフィリッピディス2014

それらを使用しない大きな理由の1つは、アプリまたはプログラムを配布または展開するときに、他の人/サーバーがグローバルサイトパッケージを持たないことです。アプリを使用しているのがあなただけの場合は、好きなことをしてください。
Andbdrew 14

5

私の見解:

#!/usr/bin/env python3

import pkg_resources

dists = [str(d).replace(" ","==") for d in pkg_resources.working_set]
for i in dists:
    print(i)

2

PYTHONPATHpython libs dirの絶対パスの代わりに使用する方法は次のとおりです。

for d in `echo "${PYTHONPATH}" | tr ':' '\n'`; do ls "${d}"; done

[ 10:43 Jonathan@MacBookPro-2 ~/xCode/Projects/Python for iOS/trunk/Python for iOS/Python for iOS ]$ for d in `echo "$PYTHONPATH" | tr ':' '\n'`; do ls "${d}"; done
libpython2.7.dylib pkgconfig          python2.7
BaseHTTPServer.py      _pyio.pyc              cgitb.pyo              doctest.pyo            htmlentitydefs.pyc     mimetools.pyc          plat-mac               runpy.py               stringold.pyc          traceback.pyo
BaseHTTPServer.pyc     _pyio.pyo              chunk.py               dumbdbm.py             htmlentitydefs.pyo     mimetools.pyo          platform.py            runpy.pyc              stringold.pyo          tty.py
BaseHTTPServer.pyo     _strptime.py           chunk.pyc              dumbdbm.pyc            htmllib.py             mimetypes.py           platform.pyc           runpy.pyo              stringprep.py          tty.pyc
Bastion.py             _strptime.pyc          chunk.pyo              dumbdbm.pyo            htmllib.pyc            mimetypes.pyc          platform.pyo           sched.py               stringprep.pyc         tty.pyo
Bastion.pyc            _strptime.pyo          cmd.py
....


1

これをPython内から実行する必要がある場合は、サブプロセスを呼び出すだけです

from subprocess import PIPE, Popen

pip_process = Popen(["pip freeze"], stdout=PIPE,
                   stderr=PIPE, shell=True)
stdout, stderr = pip_process.communicate()
print(stdout.decode("utf-8"))
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.