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
の結果を何も考えずにアンインストールしていくとコマンドが使えなくなる可能性があるので注意。