Ubuntu PIP はパッケージを VirtualEnv 内ではなくグローバルにインストールします

Ubuntu PIP はパッケージを VirtualEnv 内ではなくグローバルにインストールします

私は、virtualenv を作成し、プロジェクトにある requirements.txt からパッケージをインストールしようとしています。

環境を作成するときに、Python と pip が実際にその環境から来ているかどうかを確認します。つまり、次を実行します:

source ./virtualenv/bin/activate

which pip

which python

virtualenvディレクトリ内にあるバイナリを指す結果が返されます

次にパッケージのインストールに進みます。 pip install -r requirements.txt

しばらくの間、requirements.txt 内の行について問題がありましたpkg-resources=0.0.0。結局、その行がこのファイルに入力されるのは、Ubuntu のバグが原因でした。おそらくご想像のとおり、私はこのファイルを Ubuntu マシンで作成しました。

線を消すとインストールが続行されます。

しかし、インストール後にpip listを実行すると、リストには

pip (8.1.1) pkg-resources (0.0.0) セットアップツール (20.7.0)

さらに、virtualenv を無効にして pip list をグローバルに実行すると、すべての依存関係がグローバルにインストールされていることがわかります。

ここで 2 つの疑問があります。1 つは、最も明白なことですが、なぜこのようなことが起こるのでしょうか。2 つ目は、グローバル パッケージをクリーンアップして、現在そこに存在する汚染物質をアンインストールするにはどうすればよいかということです。

補遺:

さらに別の奇妙な動作は次のとおりです。sudo pip uninstall -r requirements.txtグローバル インストールを元に戻すために virtualenv 内から実行しようとすると、次のエラーが発生します。

要件 aldryn-apphooks-config をアンインストールできません。インストールされていません。

つまり、アンインストールしようとすると、pip は virtualenv 内のパッケージを検索しようとするようです。

一方、virtualenv を非アクティブ化すると、同じコマンドを使用してグローバル インストールからパッケージを正常にアンインストールできます。

どういうわけか、Ubuntu での pip install コマンドの動作は、 pip uninstall コマンドと比べると異なります。これらは異なる場所でパッケージを「検索」します。

関連情報