Как проверить, был ли virtualenv создан с помощью --no-site-packages? - PullRequest
17 голосов
/ 17 января 2012

Иногда я получаю ошибки, которые, как я подозреваю, являются результатом того, что мое приложение Django использует глобально установленные модули Python / приложения Django вместо тех, которые находятся внутри его virtualenv.

Есть ли способ проверить, было ли создано приложение моего приложения virtualenvс '--no-site-packages' без необходимости удалять его, а затем заново создать его следующим образом?

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

Конечно, должен быть лучший способ!Спасибо.

Ответы [ 3 ]

22 голосов
/ 17 января 2012

В <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
5 голосов
/ 17 января 2012

Простой способ - открыть интерактивную оболочку 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'>
3 голосов
/ 17 января 2012

@ Решение Роба действительно для более новых версий, я изучил код:).

Если у вас старый (например, мой 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
...