Python, pip list / freezeでインストール済みパッケージ一覧を確認

Modified: | Tags: Python, pip

Pythonのパッケージ管理システムpipではpip list, pip freezeコマンドでインストール済みのパッケージ一覧を確認できる。

pip listでは最新版のパッケージや最新版でない(更新可能な)パッケージ、ほかのパッケージから依存されていないパッケージなどを選択して出力することが可能。

pip freezeはパッケージをまとめてインストールするための設定ファイルであるrequirements.txtを作成するときに便利。

すべてのオプションに触れているわけではないので、より詳細な内容は公式ドキュメントを参照。

pipの基本的な使い方については以下の記事を参照。

なお、Anacondaを使っている場合は、conda listでインストール済みパッケージの一覧を確認できる。

pip listとpip freezeの違い

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

関連カテゴリー

関連記事