私は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
動作するはずですか?
(virtualenvを発見するずっと前に)気づくまで、このような問題がありました。bashrcファイルのPYTHONPATHにディレクトリを追加していました。一年以上前だったので、私はすぐにそれを考えませんでした。
グローバル環境ではなく、作成した仮想環境で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
の代わりにこのバイナリが呼び出されます。
最終的に、なんらかの理由で、pip -Eが機能していなかったことがわかりました。しかし、実際にvirtualenvをアクティブにし、virtualenvが提供するeasy_installを使用してpipをインストールし、pipを内部から直接使用すると、期待どおりに動作し、virtualenvのパッケージのみが表示されるようです
私はこれが非常に古い質問であることを知っていますが、ここに到着して解決策を探している人にとっては:
忘れずにvirtualenvをアクティブ化(source bin/activate
)実行前pip freeze
。それ以外の場合は、すべてのグローバルパッケージのリストを取得します。
--no-site-packages
は、名前が示すように、sys.path
から標準のサイトパッケージディレクトリを削除する必要があります。標準のPythonパスに存在するものはすべてそこに残ります。
PYTHONPATH
を一時的にクリアします:
export PYTHONPATH=
次に、仮想環境を作成してアクティブ化します。
virtualenv foo
. foo/bin/activate
その後のみ:
pip freeze
同様の問題は、スクリプトを_script.py
_として直接呼び出すと、Windowsでデフォルトのオープナーを使用して、仮想環境の外部でPythonを開きます。_python script.py
_仮想環境ではPythonを使用します。
これは、virtualenvディレクトリを別のディレクトリ(Linux上)に移動した場合、または親ディレクトリの名前を変更した場合にも発生するようです。
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
pip --version
which python
pip install package_name
この答えがあなたに役立つことを願っています!
Virtualenv pipが動作しない理由の1つは、名前に/Documents/project name/app
という名前のスペースがある親フォルダーのいずれかが/Documents/projectName/app
に名前を変更すると問題が解決する場合です。
すべてのpipインストールのリストを示します options -'-E
'オプションが見つかりませんでした。古いバージョンにある可能性があります。以下では、今後のSOユーザーのためにvirtualenv
のわかりやすい英語の使用と作業を共有しています。
すべてがうまくいくようで、virtualenv
(foo
)のアクティブ化を受け入れます。それがするのは、複数の(そして変化する)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インストール/パッケージ。
私はこれと同じ問題を抱えていました。 (Ubuntuで)私にとっての問題は、私のパス名に$
。 $ dirの外側にvirtualenvを作成したとき、それはうまく働きました。
奇妙な。