pip listとpip freezeの違い

pipでインストールしたPythonのパッケージ一覧を確認したい場合、pip listかpip freezeでできます。この2つのサブコマンドの違いが気になってので、調べた事を書いています。

目的と動作環境

最終更新日:2021/6/16

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と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でインストールできるみたいです。

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の色々なコマンドオプションについて

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

[広告] Kindle Unlimitedなら対象の本が定額で読み放題
対象本には、プログラミングなどのIT関連本、マンガ、雑誌、ビジネス書などがたくさんあります!

参考サイト

pip documentation Commands