Python, pip list / freezeでインストール済みパッケージ一覧を確認
Pythonのパッケージ管理システムpipではpip list, pip freezeコマンドでインストール済みのパッケージ一覧を確認できる。
pip listでは最新版のパッケージや最新版でない(更新可能な)パッケージ、ほかのパッケージから依存されていないパッケージなどを選択して出力することが可能。
pip freezeはパッケージをまとめてインストールするための設定ファイルであるrequirements.txtを作成するときに便利。
すべてのオプションに触れているわけではないので、より詳細な内容は公式ドキュメントを参照。
pipの基本的な使い方については以下の記事を参照。
なお、Anacondaを使っている場合は、conda listでインストール済みパッケージの一覧を確認できる。
pip listとpip freezeの違い
同じ環境でpip listとpip freezeをそれぞれ実行した出力例を以下に示す。
$ pip list
Package Version
---------- -------
future 0.16.0
pip 18.1
setuptools 39.2.0
six 1.11.0
wheel 0.31.1
$ pip freeze
future==0.16.0
six==1.11.0
pip listとpip freezeの違いは、出力フォーマットとパッケージ管理のためのパッケージの出力の有無。
pip listの出力フォーマットはpipのバージョンや設定によって異なる場合があるが、pip freezeでは<package-name>==<version>というフォーマットで出力される。
pip freezeのフォーマットはパッケージをまとめてインストールするための設定ファイルであるrequirements.txtのフォーマット。pip freezeをリダイレクション>でファイル出力して別の環境で使うと、同じパッケージを一括でインストールできる。
$ pip freeze > requirements.txt
$ pip install -r requirements.txt
また、pip freezeではpip自体やsetuptools, wheelといったパッケージ管理のためのパッケージは出力されない。これらのパッケージは上述のrequirements.txtを使った環境の移植には必要なく、pip freezeはrequirements.txtの作成に適したコマンドだといえる。
なお、pip freezeに--allオプションをつけるとpipなどのパッケージも出力される。
$ pip freeze --all
future==0.16.0
pip==18.1
setuptools==39.2.0
six==1.11.0
wheel==0.31.1
以下で説明するように、pip listでは最新版のパッケージや最新版でない(更新可能な)パッケージ、ほかのパッケージから依存されていないパッケージなどを選択して出力できる。
- 様々な条件付きでパッケージ一覧を確認したい場合は
pip list requirements.txtを作成したい場合はpip freeze
という使い分けとなる。
出力フォーマット変更: --format
pip listでは--formatオプションで出力フォーマットを変更できる。
$ pip list --format <format>
<format>には、columns, freeze, jsonを指定可能。バージョン23.1のpipではcolumnsがデフォルトになっている。以前のバージョンではlegacyというフォーマットも指定できたが、23.1ではできなくなっている。
$ pip list --format columns
Package Version
---------- -------
future 0.16.0
pip 18.1
setuptools 39.2.0
six 1.11.0
wheel 0.31.1
$ pip list --format freeze
future==0.16.0
pip==18.1
setuptools==39.2.0
six==1.11.0
wheel==0.31.1
$ pip list --format json
{"version": "0.16.0", "name": "future"}, {"version": "18.1", "name": "pip"}, {"version": "39.2.0", "name": "setuptools"}, {"version": "1.11.0", "name": "six"}, {"version": "0.31.1", "name": "wheel"}
最新版のパッケージのみ: -u, --uptodate
最新版にアップデートされているパッケージのみを出力したい場合はpip listに-uまたは--uptodateオプションをつける。
$ pip list -u
Package Version
------- -------
future 0.16.0
pip 18.1
six 1.11.0
最新版でないパッケージのみ: -o, --outdated
最新版でない更新可能なパッケージのみを出力したい場合はpip listに-oまたは--outdatedオプションをつける。
出力フォーマットがcolumns, jsonでは、現在インストールされているバージョンと最新版のバージョンがあわせて出力される。
$ pip list -o
Package Version Latest Type
---------- ------- ------ -----
setuptools 39.2.0 40.4.3 wheel
wheel 0.31.1 0.32.1 wheel
$ pip list -o --format json
{"latest_filetype": "wheel", "version": "39.2.0", "name": "setuptools", "latest_version": "40.4.3"}, {"latest_filetype": "wheel", "version": "0.31.1", "name": "wheel", "latest_version": "0.32.1"}
出力フォーマットfreezeでは、-oまたは--outdatedオプションは付けられない。
% pip list -o --format freeze
ERROR: List format 'freeze' can not be used with the --outdated option.
依存されていないパッケージのみ: --not-required
ほかのパッケージから依存されていないパッケージのみを出力したい場合はpip listに--not-requiredオプションをつける。
$ pip list --not-required
Package Version
---------- -------
future 0.16.0
pip 18.1
setuptools 39.2.0
six 1.11.0
wheel 0.31.1
これで出力されたパッケージはアンインストールしても依存関係が崩れることはない。大量のパッケージがインストールされた環境でアンインストールしてもいいパッケージを見つけるのに便利。
なお、チェックされるのはあくまでも依存関係のみで、例えばpipのように外部コマンドとして使われているものもリストアップされる。--not-requiredの結果を何も考えずにアンインストールしていくとコマンドが使えなくなる可能性があるので注意。