「pip list」と「pip freeze」の違い

pip listpip freezeは、Pythonのパッケージ管理ツールであるpipのコマンドの一部で、インストールされているパッケージの情報を表示するために使用されます。しかし、それらは表示する内容に違いがあります。

pip listコマンドは、インストールされているすべてのパッケージを表示します。各パッケージには、パッケージ名、バージョン、および依存関係の状態が表示されます。このコマンドは、パッケージのバージョンを更新する場合や、使用していないパッケージを削除する場合に便利です。

一方、pip freezeコマンドは、現在のPython環境にインストールされているすべてのパッケージをリストアップし、必要に応じて出力をファイルに保存することができます。出力フォーマットは、パッケージ名とバージョンの情報が、pip installコマンドで使用できるように書式設定されたテキストファイルです。これは、アプリケーションの依存関係を完全に再現するために、プロジェクトに必要なパッケージを一度にインストールする必要がある場合に便利です。

例えば、以下のようにpip freezeコマンドを実行すると、現在のPython環境にインストールされているすべてのパッケージが表示されます。

pip freeze

出力例:

Flask==2.0.2
Jinja2==3.0.2
MarkupSafe==2.0.2
Werkzeug==2.0.2
click==8.0.1
itsdangerous==2.0.1

一方、以下のようにpip listコマンドを実行すると、インストールされたすべてのパッケージが表示され、それぞれの依存関係の状態も含まれます。

pip list

出力例:

Package       Version
------------- -------
click         8.0.1
Flask         2.0.2
itsdangerous  2.0.1
Jinja2        3.0.2
MarkupSafe    2.0.2
pip           21.1.3
setuptools    57.4.0
Werkzeug      2.0.2

したがって、pip listコマンドは、依存関係の状態を確認することができる反面、pip freezeコマンドは、依存関係を含めたパッケージ情報を他の開発環境で再現するために使用できるテキストファイルを出力します。pip freezeコマンドの出力は、requirements.txtファイルとして保存されることが一般的です。このファイルは、依存関係を持つパッケージを一括でインストールできるようにするために、プロジェクトのリポジトリに保存されることがあります。

例えば、以下のようにpip freezeコマンドを使用し、requirements.txtファイルに出力することができます。

pip freeze > requirements.txt

>演算子は、出力をファイルにリダイレクトします。上記のコマンドは、現在のPython環境にインストールされているすべてのパッケージをリストアップし、それらをrequirements.txtファイルに書き込みます。

また、requirements.txtファイルを使用して、別のPython環境に同じパッケージを一括でインストールすることもできます。以下のように、pip installコマンドに-rオプションを付けてrequirements.txtファイルを指定することで、同じパッケージを再現することができます。

pip install -r requirements.txt

上記のコマンドは、requirements.txtファイルに記述されているすべてのパッケージをインストールします。

したがって、pip listpip freezeは、パッケージ管理において重要なツールであり、それぞれの用途に応じて使い分けることが必要です。