![](/img/trans.png)
[英]Including global package into a virtualenv that has been created with --no-site-packages
[英]How to check whether virtualenv was created with '--no-site-packages'?
有时我得到错误,我怀疑是我的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
当然必须有更好的方法! 谢谢。
当您使用--no-site-packages
创建虚拟环境时, <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
一种简单的方法是打开交互式python shell并执行import somemodule; print somemodule
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'>
@ Rob的解决方案适用于较新版本,我查看了代码:)。
如果你有一个旧的(如我的1.4.5),你可以检查python路径。 如果路径中有默认的“site-packages”目录(例如/ usr / lib / python / site-packages),则使用 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.