web-dev-qa-db-ja.com

virtualenv --no-site-packagesとpipはまだグローバルパッケージを見つけていますか?

私はvirtualenv --no-site-packagesは、完全に分離され分離されたPython環境を作成しますが、そうではないようです。

たとえば、python-Djangoをグローバルにインストールしていますが、異なるDjangoバージョンでvirtualenvを作成したいです。

$ virtualenv --no-site-packages foo       
New python executable in foo/bin/python
Installing setuptools............done.
$ pip -E foo install Django
Requirement already satisfied: Django in /usr/share/pyshared
Installing collected packages: Django
Successfully installed Django

私が言えることから、pip -E foo install上記は、新しいバージョンのDjangoを再インストールすることになっています。また、pipに環境をフリーズするように指示すると、大量のパッケージが取得されます。私は、--no-site-packagesこれは空白でしょうか?

$ pip -E foo freeze
4Suite-XML==1.0.2
BeautifulSoup==3.1.0.1
Brlapi==0.5.3
BzrTools==1.17.0
Django==1.1
... and so on ...

--no-site-packages動作するはずですか?

125
ianw

(virtualenvを発見するずっと前に)気づくまで、このような問題がありました。bashrcファイルのPYTHONPATHにディレクトリを追加していました。一年以上前だったので、私はすぐにそれを考えませんでした。

102
wobbily_col

グローバル環境ではなく、作成した仮想環境でpipバイナリを実行していることを確認する必要があります。

env/bin/pip freeze

テストを見る:

--no-site-packagesオプションを使用してvirtualenvを作成します。

$ virtualenv --no-site-packages -p /usr/local/bin/python mytest
Running virtualenv with interpreter /usr/local/bin/python
New python executable in mytest/bin/python
Installing setuptools, pip, wheel...done.

新しく作成されたfreezeからのpipの出力を確認します。

$ mytest/bin/pip freeze
argparse==1.3.0
wheel==0.24.0

ただし、グローバルpipを使用すると、次のようになります。

$ pip freeze
...
pyxdg==0.25
...
range==1.0.0
...
virtualenv==13.1.2

つまり、pipがシステム全体にインストールしたすべてのパッケージ。 which pipをチェックすると、(少なくとも私の場合は)/usr/local/bin/pipのようなものが得られます。つまり、pip freezeを実行すると、mytest/bin/pipの代わりにこのバイナリが呼び出されます。

24
fedorqui

最終的に、なんらかの理由で、pip -Eが機能していなかったことがわかりました。しかし、実際にvirtualenvをアクティブにし、virtualenvが提供するeasy_installを使用してpipをインストールし、pipを内部から直接使用すると、期待どおりに動作し、virtualenvのパッケージのみが表示されるようです

23
ianw

私はこれが非常に古い質問であることを知っていますが、ここに到着して解決策を探している人にとっては:

忘れずにvirtualenvをアクティブ化source bin/activate)実行前pip freeze。それ以外の場合は、すべてのグローバルパッケージのリストを取得します。

16
finspin

--no-site-packagesは、名前が示すように、sys.pathから標準のサイトパッケージディレクトリを削除する必要があります。標準のPythonパスに存在するものはすべてそこに残ります。

15

PYTHONPATHを一時的にクリアします:

export PYTHONPATH=

次に、仮想環境を作成してアクティブ化します。

virtualenv foo
. foo/bin/activate

その後のみ:

pip freeze
13
Pedro Torres

同様の問題は、スクリプトを_script.py_として直接呼び出すと、Windowsでデフォルトのオープナーを使用して、仮想環境の外部でPythonを開きます。_python script.py_仮想環境ではPythonを使用します。

3
odie5533

これは、virtualenvディレクトリを別のディレクトリ(Linux上)に移動した場合、または親ディレクトリの名前を変更した場合にも発生するようです。

2
pors

Venvのpipがまだグローバルpipとして機能するという同じ問題に遭遇しました。
多くのページを検索した後、私はこの方法を見つけました。
1。オプション「--no-site-packages」を使用して、virtualenvで新しいvenvを作成します

virtualenv --no-site-packages --python=/xx/xx/bin/python my_env_nmae

「--no-site-packages」オプションは、virtualenvのdocファイルで1.7.0以降デフォルトでtrueでしたが、手動で設定しない限り機能しないことがわかりました。純粋なvenvを取得するには、このオプションを2に設定することを強くお勧めします。作成した新しいenvをアクティブにします

source ./my_env_name/bin/activate
  1. Pipの場所とpythonの場所を確認し、これら2つのコマンドが仮想環境下にあることを確認します
pip --version
which python
  1. 仮想環境でpipを使用して、グローバルパッケージの中断からパッケージを無料でインストールします。
pip install package_name

この答えがあなたに役立つことを願っています!

1
augustus

Virtualenv pipが動作しない理由の1つは、名前に/Documents/project name/appという名前のスペースがある親フォルダーのいずれかが/Documents/projectName/appに名前を変更すると問題が解決する場合です。

1
mabdrabo

すべてのpipインストールのリストを示します options -'-E'オプションが見つかりませんでした。古いバージョンにある可能性があります。以下では、今後のSOユーザーのためにvirtualenvのわかりやすい英語の使用と作業を共有しています。


すべてがうまくいくようで、virtualenvfoo)のアクティブ化を受け入れます。それがするのは、複数の(そして変化する)python環境、つまりさまざまなPythonバージョン、さまざまなDjangoバージョン、またはその他のPythonパッケージを用意することです。本番環境で以前のバージョンを使用しており、アプリケーションで最新のDjangoリリースをテストしたい場合。

要するに、仮想環境(virtualenv)を作成および使用(アクティブ化)することにより、アプリケーションまたは単純なpythonスクリプトを異なるPythonインタープリター、つまりPython 2.7で実行またはテストできます。 3.3-新規インストール(--no-site-packagesオプションを使用)または既存/最後のセットアップからのすべてのパッケージ(--system-site-packagesオプションを使用)にすることができます。使用するには、アクティベートする必要があります。

$ pip install Djangoはグローバルサイトパッケージにインストールし、同様にpip freezeを取得するとグローバルサイトパッケージの名前が表示されます。

venv dir(foo)内で$ source /bin/activateを実行するとvenvがアクティブになります。つまり、pipでインストールされたものはすべて仮想envにのみインストールされ、pipのフリーズではグローバルサイトパッケージのリストが表示されませんpythonパッケージ。有効にすると:

$ virtualenv --no-site-packages foo       
New python executable in foo/bin/python
Installing setuptools............done.
$ cd foo
$ source bin/activate 
(foo)$ pip install Django

(foo)記号の前の$は、仮想python環境、つまりpipを使用していることを示します-インストール、フリーズ、アンインストールはこのvenvに制限され、グローバル/デフォルトには影響しませんPythonインストール/パッケージ。

0
Nabeel Ahmed

私はこれと同じ問題を抱えていました。 (Ubuntuで)私にとっての問題は、私のパス名に$。 $ dirの外側にvirtualenvを作成したとき、それはうまく働きました。

奇妙な。

0
NotAnAmbiTurner