web-dev-qa-db-ja.com

pip freezeコマンドの出力の「pkg-resources == 0.0.0」とは

pip freezeを実行すると、(他の予想されるパッケージの中で)pkg-resources==0.0.0が表示されます。このパッケージに言及している投稿をいくつか見ました( this one を含む)が、それが何であるか、またはpip freezeの出力に含まれている理由を説明していません。私が不思議に思っている主な理由は、好奇心からではありませんが、requirements.txt行を含むpip freezeで生成されたpkg-resources==0.0.0ファイルを使用してパッケージをインストールしようとすると、場合によっては物事を壊すようです(たとえば Travis CIpipを介して依存関係のインストールを試み、この行を見つけます)。

pkg-resourcesとは何ですか?また、requirements.txtからこの行を削除しても大丈夫ですか?

更新:

virtualenvにいるとき、この行はpip freezeの出力にのみ存在するようです。それが何であるか、または何をするのかはまだわかりませんが、virtualenvに関連している可能性があることをさらに調査します。

102
elethan

https://github.com/pypa/pip/issues/4022 によると、これは、Ubuntuがpipに誤ったメタデータを提供したことによるバグです。したがって、この動作の正当な理由はないようです。 Ubuntuでフォローアップバグを提出しました。 https://bugs.launchpad.net/ubuntu/+source/python-pip/+bug/163546

前の回答をバックアップするには、requirements.txtからその行を削除しても安全です。パッケージリストを安全にフリーズするMakeファイルスタンザの例を次に示します(Makefileをドロップして、make freezeで実行します)。

freeze:
    pip freeze | grep -v "pkg-resources" > requirements.txt
116
Craig Wright

質問の部分については、「この行を削除しても大丈夫ですか?」:

私はここでもubuntu 16.04で開発している同じ問題を抱えています。 "pip install -r requirements.txt"を実行しているdebian 8.5にデプロイすると、pipはpkg-resourcesが「見つかりません」と文句を言いますが、グローバルパッケージが「python-pkg-resources」にインストールされているので、依存関係は満たされます。 ubuntuでも同じ:パッケージもそこに存在します。

here のように、「暗黙的にインストールされたパッケージ」のようです。

だから:python-pkg-resourcesがインストールされているDebian/Ubuntuを使用している場合、その行を削除しても安全です。私はそうしました、そして、すべてはうまく走っています。ただし、私はこれに関する専門家ではないので、別のマシンに展開するときに問題が発生する可能性があることに注意してください。

8
karlsebal

Ubuntuでは、Ubuntu virtualenvパッケージを削除し、pipから新しいバージョンをインストールすることでこれを修正できます。

Sudo apt remove virtualenv
Sudo pip install -U virtualenv
0
ahmed