出力を比較すると、違いが明らかになります。
user@user-VirtualBox:~$ pip list
feedparser (5.1.3)
pip (1.4.1)
setuptools (1.1.5)
wsgiref (0.1.2)
user@user-VirtualBox:~$ pip freeze
feedparser==5.1.3
wsgiref==0.1.2
Pipのドキュメントの状態
freeze Output installed packages in requirements format.
list List installed packages.
しかし、「要件の形式」とは何ですか。なぜpip list
はpip freeze
よりも包括的なリストを生成するのですか?
virtualenv
を使用している場合、requirements.txt
ファイルを指定して、すべての依存関係をインストールできます。
典型的な使用法:
$ pip install -r requirements.txt
パッケージは、pip
が理解できるように特定の形式である必要があります。
feedparser==5.1.3
wsgiref==0.1.2
Django==1.4.2
...
それが「要件の形式」です。
ここで、Django==1.4.2
はDjango
バージョン1.4.2
をインストールすることを意味します(最新のものは1.6.xですが)。 ==1.4.2
を指定しない場合、利用可能な最新バージョンがインストールされます。
詳細については、「 Virtualenv and pip Basics 」および公式の「 Requirements File Format 」ドキュメントを参照してください。
この質問の2番目の部分に答えるために、pip list
に表示されるがpip freeze
に表示されない2つのパッケージは、setuptools
(easy_install)とpip
自体です。
pip freeze
は、pip自体が依存するパッケージをリストしていないようです。 --all
フラグを使用して、これらのパッケージも表示できます。
ドキュメント から:
--all
出力でこれらのパッケージをスキップしないでください:pip、setuptools、distribute、wheel
主な違いは、pip freeze
の出力をrequirements.txtファイルにダンプし、後で「凍結」環境を再構築するために使用できることです。
言い換えると、次のコマンドを実行できます。pip freeze > frozen-requirements.txt
を1台のマシンで実行してから、後で別のマシンまたはクリーンな環境で実行できます:pip install -r frozen-requirements.txt
frozen-requirements.txtを生成した元の環境と同じようにインストールされます。
pip documentation を見てください。これは、両方の機能を次のように説明しています。
ピップリスト
編集可能なものを含むインストール済みパッケージをリストします。
pip freeze
インストール済みパッケージを要件形式で出力します。
そのため、2つの違いがあります。
出力形式freeze
は、後で要件をインストールするためにpip install -r
で使用できる標準の要件形式を提供します。
出力コンテンツ、pip list
にはpip freeze
にはない編集可能ファイルが含まれます。