18

Django アプリが virtualenv 内のものではなく、グローバルにインストールされた Python モジュール/Django アプリを使用した結果であると思われるエラーが発生することがあります。

アプリの virtualenv が「--no-site-packages」で作成されたかどうかを削除せずに確認し、次のように再作成する方法はありますか?

deactivate
rmvirtualenv my_env
mkvirtualenv my_env --no-site-packages
workon my_env
pip install -r requirements.txt

きっともっと良い方法があるはずです!ありがとう。

4

3 に答える 3

23

で仮想環境を作成するときに<env>/lib/pythonX.X/呼び出されるファイルがあります。no-global-site-packages.txt--no-site-packages

virtualenv 1.7でこれを試しました:

% virtualenv --no-site-packages env.without
% virtualenv --system-site-packages env.with

% find env.without | sed 's/env.without//' > files.without
% find env.with | sed 's/env.with//' > files.with

% diff files.with*
230a231
> /lib/python3.2/no-global-site-packages.txt
于 2012-01-16T23:01:12.483 に答える
6

簡単な方法は、インタラクティブな python シェルを開いて実行import somemodule; print somemoduleし、そのモジュールがインポートされた場所からのパスを確認することです。

>>> import flask; print flask
<module 'flask' from '/home/xxx/dev/xxx/env/lib/python2.7/site-packages/flask/__init__.pyc'>

対。

>>> import flask; print flask
<module 'flask' from '/usr/lib64/python2.7/site-packages/flask/__init__.pyc'>
于 2012-01-16T22:56:57.777 に答える
3

@Robのソリューションは新しいバージョンで有効です。コードを調べました:)。

古いもの (私の 1.4.5 など) がある場合は、python パスを確認できます。パスにデフォルトの「site-packages」ディレクトリがある場合 (例: /usr/lib/python/site-packages)、virtualenv は site-packages で作成されいます。

次のようなものから確認できます。

for p in sys.path:
   if p.find("site-packages") >= 0:
     print p

--no-site-packagesがある場合、すべてのパスは次のようになります。

/home/user/virtualenv/myenv/lib/python2.6/site-packages/distribute-0.6.10-py2.6.egg
/home/user/virtualenv/myenv/lib/python2.6/site-packages/pip-1.0.2-py2.6.egg
/home/user/virtualenv/myenv/lib/python2.6/site-packages

それ以外の場合は、次のようになります。

/home/user/virtualenv/myenv/lib/python2.6/site-packages/distribute-0.6.10-py2.6.egg
/home/user/virtualenv/myenv/lib/python2.6/site-packages/pip-1.0.2-py2.6.egg
/home/user/virtualenv/myenv/lib/python2.6/site-packages
/usr/local/lib/python2.6/site-packages
于 2012-01-17T13:33:50.467 に答える