1. ホーム
  2. python

[解決済み] pipがvirtualenvの代わりにグローバルなsite-packagesにインストールする。

2022-07-15 01:22:21

質問

使用方法 pip3 でパッケージをインストールします。 virtualenv を指定すると、そのパッケージは virtualenv フォルダの中ではなく、グローバルな site-packages フォルダにインストールされます。以下は、OS X Mavericks (10.9.1) 上での Python3 と virtualenv のセットアップ方法です。

Homebrew を使って Python3 をインストールしました。

ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"
brew install python3 --with-brewed-openssl

を変更しました。 $PATH の変数を .bash_profile ;に次の行を追加した。

export PATH=/usr/local/bin:$PATH

実行中 which python3 戻る /usr/local/bin/python3 (を返す(シェルを再起動した後)。

注意してください。 which python3 はまだ / を返します。 usr/bin/python を返しますが。

インストールされている virtualenv 使用中 pip3 :

pip3 install virtualenv

次に、新しい virtualenv を作成し、それをアクティブにします。

virtualenv testpy3 -p python3
cd testpy3
source bin/activate

注意:-p python3 を指定しないと、virtualenv の bin フォルダから pip がなくなります。

実行中 which pipwhich pip3 はどちらも virtualenv フォルダを返します。

/Users/kristof/VirtualEnvs/testpy3/bin/pip3

これで、起動したvirtualenvでpipを使ってMarkdownなどをインストールしようとすると、pipはvirtualenvのsite-packagesフォルダではなく、グローバルsite-packagesフォルダにインストールされます。

pip install markdown

実行中 pip list が返されます。

Markdown (2.3.1)
pip (1.4.1)
setuptools (2.0.1)
virtualenv (1.11)

の内容は /Users/kristof/VirtualEnvs/testpy3/lib/python3.3/site-packages :

__pycache__/
_markerlib/
easy_install.py
pip/
pip-1.5.dist-info/
pkg_resources.py
setuptools/
setuptools-2.0.2.dist-info/

の内容は /usr/local/lib/python3.3/site-packages :

Markdown-2.3.1-py3.3.egg-info/
__pycache__/
easy-install.pth
markdown/
pip-1.4.1-py3.3.egg/
setuptools-2.0.1-py3.3.egg
setuptools.pth
virtualenv-1.11-py3.3.egg-info/
virtualenv.py
virtualenv_support/

ご覧のように グローバル site-packagesフォルダはMarkdownを含み、virtualenvフォルダは含んでいません。

注意: 私は以前、別の VM に Python2 と Python3 をインストールしていました (次の これら の指示に従った)、Python3 で同じ問題が発生しました。Python2 ベースの仮想環境にパッケージをインストールすると、完璧に動作しましたが。

どんなヒントでも、ヒントでも、...非常に感謝します。

どのように解決するのですか?

面白いことに、私はちょうど全く同じ問題に直面していました。最終的に解決しましたが、何が原因だったのか、まだわかりません。

あなたの bin/pipbin/activate スクリプトを使用します。で bin/pip で、shebangを見てください。それは正しいですか?もしそうでなければ、修正してください。次に、行の〜で 42 の中に bin/activate で、virtualenvのパスが正しいかどうか確認してください。以下のような感じになります。

VIRTUAL_ENV="/Users/me/path/to/virtual/environment"

間違っていたら訂正してください。 deactivate で、次に . bin/activate で、お互いの問題が同じ原因であれば、うまくいくはずです。それでもダメなら、とにかく正しい道を歩んでいるのです。私もあなたと同じように問題解決のルーチンを経験しました。 which pip を何度も何度も繰り返し、スタックトレースを追ったりしました。

を絶対に確認する。

/Users/kristof/VirtualEnvs/testpy3/bin/pip3

はあなたが望むものであり、他の似たような名前のテストプロジェクトを参照するものではありません(私もこの問題を抱えており、どのように始まったのか見当もつきません。私の疑いは、同時に複数のvirtualenvsを実行していることです)。

このどれもがうまくいかない場合、一時的な解決策は、Joe Holloway が言ったように、次のようになるかもしれません。

仮想環境の pip をフルパスで実行すれば (つまり、実行可能パスの検索に頼らない)、環境を有効にする必要すらありません。それは正しいことをしてくれるでしょう。

おそらく理想的ではありませんが、ピンチの時にはうまくいくはずです。

私の最初の質問に対するリンクです。

VirtualEnv/Pip がグローバルにパッケージをインストールしようとしています。