django 如何检查virtualenv是否使用'--no-site-packages'创建?

o2g1uqev  于 2023-05-23  发布在  Go
关注(0)|答案(3)|浏览(97)

有时我会收到错误,我怀疑是我的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

一定有更好的办法!谢谢。

ep6jt1vc

ep6jt1vc1#

在使用--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
uqjltbpv

uqjltbpv2#

一种简单的方法是打开交互式python shell并执行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'>
v09wglhw

v09wglhw3#

@Rob的解决方案适用于较新的版本,我已经查看了代码:)。
如果你有一个旧的(比如我的1.4.5),你可以检查python路径。如果路径中有默认的“site-packages”目录(例如/usr/lib/python/site-packages),那么你的virtualenv就用 * site-packages创建了。
您可以从以下内容中查看它:

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

如果你有 --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

相关问题