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

Pythonのパッケージ管理システムpipではpip list, pip freezeコマンドでインストール済みのパッケージ一覧を確認できます。 pip listでは最新版のパッケージや最新版でない(更新可能な)パッケージ、ほかのパッケージから依存されていないパッケージなどを選択して出力することができます。 pip freezeはパッケージをまとめてインストールするための設定ファイルであるrequirements.txtを作成するときに便利です。

ここでは以下の内容について説明します。

pip listとpip freezeの違い 出力フォーマット変更: --format 最新版のパッケージのみ: -u, --uptodate 最新版でないパッケージのみ: -o, --outdated 依存されていないパッケージのみ: --not-required

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

pip list — pip 18.1 documentation pip freeze — pip 18.1 documentation

pipの基本的な使い方については

以下の例はバージョン18.1のpipで実行しています。

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では==というフォーマットで出力されます。 このフォーマットはパッケージをまとめてインストールするための設定ファイルである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を指定できます。バージョン18.1のpipではcolumnsがデフォルトになっています。以前のバージョンではlegacyというフォーマットも指定できたが、18.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では現在インストールされているバージョンのみ。

$ pip list -o --format freeze
setuptools==39.2.0
wheel==0.31.1

依存されていないパッケージのみ: --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の結果を何も考えずにアンインストールしていくとコマンドが使えなくなる可能性があるので気をつけてください。

Last Updated: 6/26/2019, 10:48:26 PM