2012-01-16 30 views
14

有时我,我怀疑错误是使用全球安装的Python模块的我Django应用程序的结果/ Django的应用程序,而不是那些它的virtualenv中。如何检查的virtualenv是否与“--no-站点包”创造出来的?

有没有一种方法来检查我的应用程序的virtualenv中是否有“--no-站点包”创建,而不必删除它,然后如下重新创建它?

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

当然,一定有更好的办法!谢谢。

回答

21

有一个在<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

一个简单的方法是打开交互式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'> 
+0

只有当你有相同的模块安装在两地。你不能真正尝试同时导入两者(除非你改变python路径) – 2012-01-17 13:15:38

+0

如果不是,你会得到一个'ImportError' - 取决于你得到它的位置,你知道它只安装在位置X. – ThiefMaster 2012-01-17 13:25:00

+0

如果您在站点包中安装了模块,则为true。但是,你必须选择一个模块,你知道它在那里,实际上检查'ImportError' – 2012-01-17 15:09:28

3

@罗布的解决方案是有效的新版本,我已经研究过的代码:)。

如果你有一个旧的(像我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-站点包,所有你的路会是这样:

/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 
相关问题