151

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ていますか?

4

13 に答える 13

119

(virtualenv を発見するずっと前に) .bashrc ファイルの PYTHONPATH にディレクトリを追加していたことに気付くまで、私はこのような問題を抱えていました。1年以上前だったので、すぐには思いつきませんでした。

于 2013-04-08T19:46:09.957 に答える
31

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

env/bin/pip freeze

テストを見る:

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

$ 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

しかし、 global を使用すると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ます。

于 2015-10-27T11:25:36.997 に答える
24

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

于 2009-09-09T20:57:04.910 に答える
20

次の方法で一時的にクリアPYTHONPATHします。

export PYTHONPATH=

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

virtualenv foo
. foo/bin/activate

その場合のみ:

pip freeze
于 2017-10-27T17:02:57.393 に答える
19

これは非常に古い質問であることは承知していますが、ここに来て解決策を探している人のために:

を実行する前にvirtualenv ( source bin/activate)を有効にすることを忘れないでくださいpip freeze。それ以外の場合は、すべてのグローバル パッケージのリストを取得します。

于 2013-03-02T20:06:48.577 に答える
16

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

于 2009-09-05T10:47:29.790 に答える
5

スクリプトを直接呼び出すと、Windows で同様の問題が発生する可能性がscript.pyあります。これは、Windows のデフォルトのオープナーを使用し、仮想環境の外部で Python を開きます。で呼び出すpython script.pyと、仮想環境で Python が使用されます。

于 2013-10-24T01:55:56.927 に答える
2

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

于 2015-06-19T13:33:11.103 に答える