pipでインストールしたPythonのパッケージ一覧を確認したい場合、pip listかpip freezeでできます。この2つのサブコマンドの違いが気になってので、調べた事を書いています。
※ 本ページはプロモーションが含まれています。
Pythonで外部パッケージをインストールや管理する場合、パッケージ管理システムのpipを使うと思います。
そして、pipでインストールしたパッケージの一覧やバージョンを確認したい場合、pipのサブコマンドの"pip list"や"pip freeze"があります。このページでは、この2つのコマンドについて説明しています。
■動作環境やバージョンは以下の通りです。
OS:macOS Big Sur(バージョン11.4)
シェル:bash
$ python -V
Python 3.9.0
$ pip -V
pip 21.1.2
まず、pip listとpip freezeをそれぞれ実行して、インストールされているパッケージを確認してみます(私の現在の環境で)。
$ pip list
Package Version
---------- -------
numpy 1.20.3
Pillow 8.2.0
pip 21.1.2
setuptools 49.2.1
$ pip freeze
numpy==1.20.3
Pillow==8.2.0
pip listでは最初から入っているpipとsetuptoolsも表示されます。
2つのコマンドは両方ともインストールされているパッケージとそのパッケージのバージョンを一覧表示してくれるようですが、違いは何だろうと少し気になったので調べてみました。
まず、pipのヘルプでサブコマンドのそれぞれの説明を見てみます。
$ pip -h
Usage:
pip <command> [options]
Commands:
〜
freeze Output installed packages in requirements format.
list List installed packages.
〜
listがインストールされたパッケージをリスト形式で出力し、freezeがインストールされたパッケージをrequirements形式で出力するという意味ですね。
次に、freezeのrequirements形式って何?という疑問が湧きましたが、どうやらこのrequirements形式のファイルから、ファイル内に書いてあるパッケージ全てをpipでインストールできるみたいです。
実際に、pip freezeコマンドでrequirements形式のファイルを出力し、そのファイルを使って外部パッケージをインストールしてみます。
(あるPython環境のパッケージ一覧情報をエクスポートして、別のPython環境にそのパッケージ一覧をインポートしてインストールするという感じです。)
まず、pip freezeの実行結果をrequirements.txtというファイルに出力します。
$ pip freeze > requirements.txt
$ cat requirements.txt
numpy==1.20.3
Pillow==8.2.0
次に、このrequirements.txtを読み込んで、外部パッケージのnumpy,Pillowをインストールしてみます。
そのためのPythonの仮想環境を新規に作成しました(外部パッケージはまだ何もインストールされていない状況です)。
$ pip list
Package Version
---------- -------
pip 21.1.2
setuptools 49.2.1
$ pip freeze
Pythonの仮想環境はvenvを使えば新規に作成できます。venvを試した事がない方は別ページで説明していますので、そちらを参考にしてみてください。
venvでPythonの仮想環境を試してみる
そして、requirements.txtファイルを読み込んで外部パッケージをインストールする場合、pip installの-rオプションでファイルを指定すればできます。
$ pip install -r requirements.txt
Collecting numpy==1.20.3
Downloading numpy-1.20.3-cp39-cp39-macosx_10_9_x86_64.whl (16.1 MB)
|████████████████████████████████| 16.1 MB 6.4 MB/s
Collecting Pillow==8.2.0
Downloading Pillow-8.2.0-cp39-cp39-macosx_10_10_x86_64.whl (2.8 MB)
|████████████████████████████████| 2.8 MB 26.7 MB/s
Installing collected packages: Pillow, numpy
Successfully installed Pillow-8.2.0 numpy-1.20.3
$ pip list
Package Version
---------- -------
numpy 1.20.3
Pillow 8.2.0
pip 21.1.2
setuptools 49.2.1
$ pip freeze
numpy==1.20.3
Pillow==8.2.0
できました!pip listとpip freezeでnumpy,Pillowがインストールされている事も確認できました。
pip freezeで表示されなかったpip,setuptoolsの2つは最初から入っていてインストールする必要がないから、pip freezeでは表示されなかった訳かな。
pip listとpip freezeの違いはわかりましたが、この2つのコマンドについてもう少しメモ書き程度に書いておきます。
pip listとpip freezeは、それぞれ様々なオプションがあります。オプションについては、ヘルプ(-hオプションで)で確認できます。
・pip listのヘルプ
$ pip list -h
Usage:
pip list [options]
Description:
List installed packages, including editables.
Packages are listed in a case-insensitive sorted order.
List Options:
-o, --outdated List outdated packages
-u, --uptodate List uptodate packages
-e, --editable List editable projects.
-l, --local If in a virtualenv that has global access, do not list globally-installed packages.
〜
・pip freezeのヘルプ$ pip freeze -h
Usage:
pip freeze [options]
Description:
Output installed packages in requirements format.
packages are listed in a case-insensitive sorted order.
Freeze Options:
-r, --requirement <file> Use the order in the given requirements file and its comments when generating output. This option can be used multiple times.
-f, --find-links <url> URL for finding packages, which will be added to the output.
〜
pip listは、--formatオプションで出力フォーマットを指定できます。
試しにjsonとfreeze形式で表示してみます。
$ pip list --format=json
[{"name": "numpy", "version": "1.20.3"}, {"name": "Pillow", "version": "8.2.0"}, {"name": "pip", "version": "21.1.2"}, {"name": "setuptools", "version": "49.2.1"}]
$ pip list --format=freeze
numpy==1.20.3
Pillow==8.2.0
pip==21.1.2
setuptools==49.2.1
pip listは、-oオプション(もしくは--outdate)でインストールされているパッケージの内、バージョンが最新バージョンでないパッケージを一覧表示します。
$ pip list -o
Package Version Latest Type
---------- ------- ------ -----
setuptools 49.2.1 57.0.0 wheel
反対に、-uオプション(もしくは--uptodate)でインストールされているパッケージの内、バージョンが最新バージョンのパッケージを一覧表示します。$ pip list -u
Package Version
------- -------
numpy 1.20.3
Pillow 8.2.0
pip 21.1.2