Как проверить, был ли virtualenv создан с '--no-site-пакетами'?
Иногда я получаю ошибки, которые, как я подозреваю, являются результатом моего приложения Django, используя глобально установленные модули Python/приложения Django, а не те, которые находятся в его виртуальном пространстве.
Есть ли способ проверить, было ли создано мое приложение virtualenv с '-no-site-packages' без необходимости его удаления, а затем повторно создать его следующим образом?
deactivate
rmvirtualenv my_env
mkvirtualenv my_env --no-site-packages
workon my_env
pip install -r requirements.txt
Конечно, должен быть лучший способ! Спасибо.
Ответы
Ответ 1
Там, где вы создаете виртуальную среду с --no-site-packages
, есть файл в <env>/lib/pythonX.X/
, называемый no-global-site-packages.txt
.
Просто попробовал это с 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
Ответ 2
Простым способом является открытие интерактивной оболочки 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
Решение @Rob подходит для более новых версий, я просмотрел код:).
Если у вас есть старый (например, мой 1.4.5), вы можете проверить путь python. Если у вас есть каталог по умолчанию "site-packages" в пути (например,/usr/lib/python/site-packages), тогда ваш virtualenv был создан с помощью пакетов сайта.
Вы можете проверить это:
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