virtualenvの代わりにグローバルサイトパッケージにインストールするpip


98

を使用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 pipと、which 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ベースのvirtualenvにパッケージをインストールすると、問題なく動作しました。

ヒント、ヒント、…いただければ幸いです。


既に利用可能な場合、pipはパッケージをインストールしません。出力に「要件は既に​​満たされています」と表示されます。まだ持っていないパッケージをインストールしてみてください。ところで、pip3はbrew以外のpython3を使用する場合があります(インストール方法はpip3?)。それ自体は悪いことではないかもしれませんが、問題がある場合は注意する必要があります。
jfs 2014年

1
以前にMarkdownをインストールしていません。グローバルパッケージリストが空でした。どのパッケージを試してもかまいません。この動作は毎回再現できます。
ƘɌỈSƬƠƑ

pip3について:これは、Python3とともにhomebrewによってインストールされました。
ƘɌỈSƬƠƑ

私にとってこれも助けになりました:stackoverflow.com/questions/14695278/…他の
ユーザーへの参考

回答:


90

おかしい、これを持ち出して、私はちょうど同じ問題を抱えていた。最終的には解決しましたが、何が原因かはまだわかりません。

bin/pipおよびbin/activateスクリプトを確認してください。ではbin/pip、シェバングを見て。それが正しいか?そうでない場合は修正してください。そして、ライン上の〜42でごbin/activate、あなたのvirtualenvのパスが正しいかどうかを確認します。こんな感じになります

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

それは間違っている場合は、それを修正し、deactivateし、. bin/activate、そして私たちの相互の問題が同じ原因を持っていた場合、それは機能するはずです。それでも解決しない場合は、とにかく正しい方向に進んでいます。私は、あなたがしたのと同じ問題解決ルーチンをwhich pip繰り返し、何度も繰り返し、スタックトレースをたどりました。

絶対に確認してください

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

同じ名前の別のテストプロジェクトを参照していません(問題があり、どのように始まったのかわかりません。複数のvirtualenvを同時に実行している疑いがあります)。

これでうまくいかない場合、一時的な解決策は、ジョー・ホロウェイ氏が言ったように、

virtualenvのpipをフルパスで実行するだけ(つまり、実行可能パスの検索に依存しない)で、環境をアクティブ化する必要すらありません。それは正しいことをします。

おそらく理想的ではないかもしれませんが、それはピンチで機能するはずです。

私の元の質問へのリンク:

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


1
チェイスありがとう。私は私の投稿前にあなたの質問に来ましたが、シバンについて言及している最後の行をスキップしたようです。そして実際、の#!/usr/local/bin/python3.3代わりに設定されました#!/Users/kristof/VirtualEnvs/testpy3/bin/python3.3。私はそれを変更し、virtualenvをアクティブにし、Markdownパッケージをインストールしました。Pipは、グローバルではなくvirtualenv site-packagesフォルダーにインストールされるようになりました。
ƘɌỈSƬƠƑ

私もこれに遭遇しました。答えに感謝します。私はシバンに気づき、その後すぐにこの質問を見つけ、私の疑いを確認しました。シバンが間違っていた理由を誰かが知っていますか?新しい仮想環境を作成するたびに確認する必要がないように、恒久的な修正を見つけるとよいでしょう。
2014年

2
私も同じ問題を抱えていました。私のactivateスクリプトは大丈夫だったが、用心すべてのpip*スクリプトとeasy_install*スクリプトが間違っシェバングを持っています。それらはすべて手動で修正する必要があります。私はピップまたはそのようなものを再インストールすることによってそれらを修正することができませんでした。また、Joe Hollowayの回避策の明確化:問題はシェルがpipを検索することではなく、pipが間違った pythonを明示的に指定しているという事実です。したがって、あなたがそうのように、パイソンを自分で指定する必要があります:$ ~/.virtualenvs/venv/bin/python ~/.virtualenvs/venv/bin/pip --version
ニールTraft

--relocatable私の環境の後でこの問題に遭遇し、42行目が間違って--relocatableいます。正しく機能しなかったようです。
shellbye 2016年

4
これは、中間ディレクトリの名前を変更したときに起こりました。そのため、「/ bin」内のアクティブ化スクリプトと
PIP

16

私にとって、これはピップやvirtualenvの問題ではありませんでした。それはpythonの問題でした。オンラインでいくつかのチュートリアルを実行した後、$ PYTHONPATHを〜/ .bash_profile(または〜/ .bashrc)に手動で設定しました。この手動で設定された$ PYTHONPATHは、おそらく許可されるはずなので、virtualenvで使用可能でした。

さらにadd2virtualenv、virtualenv内の何らかの理由で、プロジェクトパスを$ PYTHONPATHに追加していませんでした。

まだ行き詰まっているかもしれない人たちのためのちょうどいくつかの分岐の道!乾杯!


11

私は同じ問題を抱えていました、venvディレクトリを削除して再作成することで解決しました!

deactivate (if venv is activated first deactivate it)
rm -rf venv
virtualenv -p python3 venv
. ENV/bin/activate
pip3 install -r requirements.txt

これですべてが魅力のように機能します。


私はpip3virtualenv を使用していましたが、デフォルトではpython2を使用していたため、のpip代わりに使用しましたpip3。私はbinを見つけるためにチェックしましたpip3。使用しvirtualenv -p python3 venvて問題を解決しました。
subtleseeker

これは私の問題を解決しました。Pycharmの自動virtualenv作成が正しく機能していませんでした。手動インストールでうまくいきました。ありがとう。
Loaderon、

5

私もこの問題を抱えていました。Mavericks Mac上のPython 3.3仮想環境内pip install <package_name>/binディレクトリから呼び出すと、PythonパッケージがPython 2.7グローバルサイトパッケージディレクトリにインストールされていました。これは、私の$ PATHがを含むディレクトリで始まっていたにもかかわらずpipです。変だ。これはCentOSでは起こりません。私にとって、解決策はではpip3なくを呼び出すことでしたpip。私がインストールされていた場合はPIPを介して、仮想環境内ez_setup、3「ピップ」の実行ファイルがインストールされていた/binディレクトリ- pippip3pip3.3。不思議なことに、3つのファイルはすべてまったく同じでした。呼び出すpip3 install <package_name>Pythonパッケージがローカルのsite-packagesディレクトリに正しくインストールされました。呼び出しpip仮想環境への完全パス名も正しく機能しました。私のMacが$ PATHを期待どおりに使用しない理由を知りたいです。


5

最初に確認することは、pipが解決する場所です。

which pip

あなたがvirtualenvにいるなら、これはあなたに次のようなものを与えると期待するでしょう:

/path/to/virtualenv/.name_of_virtualenv/bin/pip

ただし、何らかの理由でシステムのピップに解決している場合もあります。たとえば、virtualenv内からこれが表示される場合があります(これは問題です)。

/ usr / local / bin / pip(またはvirtualenvパスにないもの)。

これを解決するには、pipconfigを確認してください:

~/.pipconf
~/.conf/pip
/etc/pip.conf

そして、Pythonパスまたはpipパスを強制しているものがないことを確認してください(これで修正されました)。

次に、新しいターミナルを起動して、virtualenvを再構築します(削除してからもう一度作成します)。


2
こちらもチェック/etc/pip.conf!私は同様の問題を抱えていて、多くのデバッグの後で誰かがこのファイルをいじくり回して作業していたシステムを誤って構成したことがわかりました。
t.animal 2017年

Arch Linuxを使用しています。/etc/pip.confはOSによって設定されていると思います。
Q. Qiao

ありがとう!あなたは私の日を救った!これらの構成は、ファイルシステムに隠されたゴーストのようなものでした
MewX

2
いくつかの理由which pipでまだ正しいパスを提供していたので、pipをオーバーライドするターミナルセッション定義のエイリアスがありました!
Matteo

4

virtualenv内からpythonパッケージをインストールしているときに同じ問題に遭遇しました。私の場合の根本的な原因は異なっていました。virtualenv内から、私は(Ubuntuの癖から)次のようにしました:

sudo easy_install -Z <package>

これにより、bin / pip shebangが無視され、ルートの非virtualenv pythonを使用してグローバルサイトパッケージにインストールされました。仮想環境があるため、「sudo」なしでパッケージをインストールする必要があります


4

Manjaroの実行中に同じ問題に遭遇しました。を使用して仮想環境を作成し、を使用python3 -m ven venvしてアクティブ化しましたsource venv/bin/actiavewhich pythonそして、which pipの両方がバイナリの完全なパスを使用した場合でも、しかし、私は、virtualenvのにインストールすることができませんでした、virtualenvの中に適切なバイナリに向けます。python-pipパッケージをアンインストールするとsudo pacman -R python-pip python-reportlab(依存関係を満たすためにreportlabを含める必要がありました)、すべてが期待どおりに機能し始めたことがわかりました。理由は不明ですが、システムパッケージが優先されるダブルインストールが原因である可能性があります。


Manjaroでもこの問題があり、同じ方法で解決しました。解決した後、私python-pipはpamacを介して再インストールし、virtualenv pipは正しく機能し続けました。何が起こっているのか正確にはわかりませんが、二重インストールの問題についてのあなたの評価に同意します。
sid

3

に更新した後、同様の問題が発生しました pip==8.0.0た。不良パスを追跡するために、pipのデバッグに頼らなければならなかった。

結局のところ、私のプロファイル・ディレクトリーには、いくつかの空のパス値を持つdistutils構成ファイルがありました。これにより、すべてのパッケージが適切な仮想環境(私の場合)ではなく、同じルートディレクトリにインストールされていました。/lib/site-packages)。

設定ファイルがどのように取得されたか、またはどのように空の値が設定されたかはわかりませんが、pipの更新後に開始されました。

他の誰かがこの同じ問題に遭遇した場合~/.pydistutils.cfg、pipがデフォルトの分散構成に戻ったため、ファイルを削除する(または空の構成パスを削除する)だけで私の環境の問題が修正されました。


1
これも私の問題です。私のファイルには、このように見えた、それはそこに着いたか全くわからない:[install]\nprefix=
foslock

1
@foslockうん、それも私のように見えた。バッドニュースハハ!
Josiah Ruddell 2016


3

python 2および3がインストールされているmacosでも同じ問題が発生しました。

また、自分のpython3とpip3を指すエイリアスがありました.bash_profile

alias python=/usr/local/bin/python3
alias pip=/usr/local/bin/pip3

エイリアスを削除し、仮想環境を再作成しpython3 -m venv venvて問題を修正しました。


macos pythonのインストールは不必要に痛いimho
iomv

私は髪を抜いていたのですが、これが最終的に解決したことです。「どのpip」で問題が明らかになり、「unalias pip」で修正されました。
コリン

1

今日同じ問題に出くわした。sudo easy_install pip(OSX / Max)を使用してグローバルにpipを再インストールし、でvirtualenvを再度作成しましたsudo virtualenv nameOfVEnv。次に、新しいvirtualenvをアクティブ化した後、pipコマンドは期待どおりに機能しました。

私はsudo最初のvirtualenvの作成には使用しなかったと思います。それがpipvirtualenv内からアクセスできない理由であった可能性がありますpip2。この修正の前にアクセスできましたが、奇妙でした。


これを取得したのは、ディレクトリを別のパスに移動し、virtualenv再度実行する必要があったためです
citynorman

1

ここでは、仮想環境を使用するときに頭痛の種を回避できるいくつかのプラクティスを示します。

  • プロジェクト用のフォルダーを作成します。
  • このフォルダー内にVirtualenvプロジェクトを作成します。
  • プロジェクトの環境をアクティブ化した後は、「sudo pip install package」を使用しないでください。
  • 作業が終了したら、必ず環境を「非アクティブ化」してください。
  • プロジェクトフォルダの名前を変更しないでください。


この慣行をよりよく表すために、シミュレーションを以下に示します。


プロジェクト/環境用のフォルダーを作成する

$ mkdir venv

作成環境

$ cd venv/ 

$ virtualenv google_drive
New python executable in google_drive/bin/python
Installing setuptools, pip...done.

活性化環境

$ source google_drive/bin/activate

パッケージのインストール

(google_drive) $ pip install PyDrive
Downloading/unpacking PyDrive
Downloading PyDrive-1.3.1-py2-none-any.whl
...
...
...    
Successfully installed PyDrive PyYAML google-api-python-client oauth2client six uritemplate httplib2 pyasn1 rsa pyasn1-modules
Cleaning up...

環境内で利用可能なパッケージ

(google_drive) $ python
Python 2.7.6 (default, Oct 26 2016, 20:30:19) 
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> import pydrive.auth
>>>  
>>> gdrive = pydrive.auth.GoogleAuth()
>>>

環境を無効にする

(google_drive) $ deactivate 

$ 

パッケージは環境外では利用できません

(google_drive) $ python
Python 2.7.6 (default, Oct 26 2016, 20:32:10) 
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> import pydrive.auth
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named pydrive.auth
>>> 

ノート:

なぜsudoではないのですか?

Virtualenvは、$ PATHと他のいくつかの変数および設定を定義して、まったく新しい環境を作成します。sudo pip install packageを使用すると、Virtualenvをrootとして実行し、作成された環境全体をエスケープし、パッケージをグローバルサイトパッケージにインストールします。仮想環境があるプロジェクトフォルダー内ではありませんが、環境を活性化しました。

プロジェクトのフォルダーの名前を変更した場合(承認された回答に記載されているとおり)...

... ビン内のいくつかのファイルからいくつかの変数を調整する必要がありますプロジェクトのディレクトリあります。

例えば:

bin / pip、line 1(She Bang)

bin / activate、42行目(VIRTUAL_ENV)


1

私はこの問題を抱えていました。問題の原因となったフォルダ名の1つにスペースがあることがわかりました。私はスペースを削除し、削除してvenvを使用して再インスタンス化しましたが、すべて順調でした。


1

この問題は、virtualenvインスタンスを作成してから親フォルダー名を変更すると発生します。


1

上記の解決策のどれも私にとってうまくいきませんでした。

私のvenvはアクティブでした。 pip -Vそしてwhich pip正しいvirtualenvパスを私に与えました、しかし私pip installが活性化されたenvvでパッケージを編集したとき、私のpip freezeは空のままでした。

すべての環境変数も正しかった。

最後に、pipを変更してvirtualenvを削除しました。

easy_install pip==7.0.2

pip install pip==10

sudo pip uninstall virtualenv

venvを再インストールします。

sudo pip install virtualenv

venvを作成します。

python -m virtualenv venv_name_here

そして、すべてのパッケージが再び私のvenvに正しくインストールされました。


1

仮想環境を作成したらyourVirtualEnvName \ Scriptsにあるpipを使用してみます

仮想環境のLib \ site-packages内にパッケージをインストールする必要があります


0

私もこの問題を抱えていました。呼び出しsudo pip installにより、Pythonパッケージがグローバルなサイトパッケージディレクトリにインストールされ、呼び出しpip installは正常に機能しました。したがって、virtualenv ではsudoを使用しないでください。


または、sudoを使用する場合は、仮想環境もアクティブにする必要があります。sudo su続く<venv>/bin/activate続きますpip install
デイブ

0

同じ問題。LinuxからインストールされたPython3.5およびpip 8.0.2rpm

主な原因がわからなかったため、適切な回答ができませんでした。複数の原因が考えられます。

しかし、私は私の観察と回避策を共有する手助けができることを願っています。

  1. pyvenv--system-site-packages

    • ./binを含まないpippipシステムのサイトのパッケージから入手できます。
    • パッケージはグローバルにインストールされます(バグ?
  2. pyvenv なし --system-site-packages

    • pipにインストールされますが./bin、バージョンが異なります(からensurepip
    • パッケージは仮想環境内にインストールされます(OK

pyvenvwithの明らかな回避策--system-site-packages

  • せずに作成 --system-site-packagesオプション
  • 変更include-system-site-packages = falsetruepyvenv.cfgのファイル

0

また、virtualenvへのパスを何らかの方法で変更していないことも確認する価値があります。

その場合、最初の行bin/pip(および残りの実行可能ファイル)のパスは正しくありません。

これらのファイルを編集してパスを修正するか、virtualenvを削除して再インストールできます。


0

Python 3ersの場合

更新してみてください。私はこれとまったく同じ問題を抱えており、チェイスの答えを試しましたが、成功しませんでした。これをリファクタリングする最も速い方法は、可能であればPythonマイナー/パッチバージョンを更新することです。3.5.1を実行していて、3.5.2にアップデートしていることに気付きました。Pyvenvが再び機能します。


0

これは、virtualenvを間違った場所に作成したときに起こりました。その後、問題なくディレクトリを別の場所に移動できると思いました。それは重要でした。

mkdir ~/projects
virtualenv myenv
cd myenv
git clone [my repository]

projectsおっと、virtualenvを作成して担当者のクローンを作成する前にcdするのを忘れていました。まあ、私は怠惰すぎて破壊して再現することができません。問題なくディレクトリを移動します。

cd ~
mv myenv projects
cd projects/myenv/myrepo
pip install -r requirements

いいえ、もっと権限が必要です。何ですか?変だと思ったけどSUDO AWAY!次に、パッケージをグローバルな場所にインストールしました。

私が学んだ教訓は、virtualenv dirを削除することでした。動かさないでください。


0

Divioのインストール後にこの問題が発生しました。ターミナルを起動するときに、PATHまたは環境が何らかの方法で変更されていました。

この場合の解決策はsource ~/.bash_profile、元のpyenv / pyenv-virtualenv状態に戻すためにすでにセットアップされているはずのことを実行することでした。


0

--python=python3.6フラグ付きのvirtualenvをインストールしたときに起こりましたが、後で使用しようとしましたpip2 install
使用するバージョンのフラグでvirtualenvを作成すると、権限の問題が解決します。チェックするには、which piporまたはwhich pip2orをwhich pip3選択します(選択によって異なります)。pipあなたが使用するものがある場合venvは、ここまでのパスが問題です。


0

どういうわけか、プロジェクトフォルダーに接頭辞「」が付いたsetup.cfgファイル

プロジェクトフォルダーの外側のvirtualenvでpip installを実行すると、内部から、pipに空のプレフィックスを使用するように指示していました。

それを修正したファイルを削除する


0

私はこの問題を抱えていて、上記のすべての解決策を試した後、すべてを削除してやり直しました。

私自身の場合、私は sudo、仮想環境が存在するフォルダの1つを作成するのにし、sudoはrootに特権を与えました

腹が立った!しかし、うまくいきました!


0

何らかの理由で、ubuntuシステムにpipを介してパッケージをインストールするために「sudo」を使用する必要があります。これにより、パッケージがグローバルサイトパッケージにインストールされます。これを将来この問題に直面する可能性がある人のためにここに置きます。


0

タイトル通りの問題で解決しました。PATHをクリーンアップした後、pipはvenvサイトパッケージにインストールを開始しました。最初にローカルの〜/ binディレクトリへのパスがありました。

だから、私の助言:「ゴミ」や標準的でないものがないか環境変数を徹底的にチェックしてください。残念ながら、virtualenvはそれらの影響を受けやすい場合があります。

幸運を!


0

簡単な答えは、コマンド「virtualenv」をパラメーター「—no-site-packages」で実行することです。

説明付きの長い回答:-

だから、あちこち走って、たくさんのスレッドを調べた後、自分に問題があることがわかりました。上記の答えは考えを与えましたが、私はすべてにもう一度行きたいと思います。

  • virtualenvの作成方法が原因で、環境をアクティブ化している場合でも問題はシステム環境を参照しています。

  • virtualenv env -p python3コマンドを実行 すると、virtualenvがインストールされますが、no-global—site-packages.txtは作成されません。

  • そのため、source activateコマンドで環境をアクティブ化すると、site.pyという名前のこのファイルが実行され、このファイルが存在しないかどうかを確認します。このファイルが存在しないかどうかを確認すると、sys.pathに環境パスが追加されません。システムのpythonを使用します。

  • この問題を修正するには、追加のパラメーターを指定してvirtualenvを実行します—no-site-packagesはそのファイルを作成し、環境をアクティブ化するとPATH変数にカスタム環境パスを追加してアクセス可能にします。


0

上記の良い議論はたくさんありましたが、virtualenvの例が使用されました。'conda'はvirtualenvを管理するための推奨ツールになっているので、conda envでpipを実行する手順を次のようにまとめました。

環境の名前としてpy36rを使用し、/ opt / conda / envsは環境のプレフィックスです):

$ source /opt/conda/etc/profile.d/conda.sh # skip if already done 
$ conda activate py36r
$ pip  install pkg_xyz
$ pip  list | grep pkg_xyz

実行されるピップは/opt/conda/envs/py36r/bin/pip(ではなく/opt/conda/bin/pip)である必要があることに注意してください。

または、condaを有効にせずに次を実行することもできます

$ /opt/conda/envs/py36r/bin/pip

また、condaを使用してインストールする場合は、アクティブ化せずにインストールできます。

$ conda install -n py36r pkg_abc ...

0

ウィンドウズ

私にとっての解決策はを使用することmkvirtualenvではありませんでしたが 、

python -m venv path/to/your/virtualenv

workonは正しく動作します。

virtualenv中:pip -Vvirtualenvのpipへのパスを表示します

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.