我在SO上找了一圈,但是我找到的答案还没有解决我的问题。
我想使用隔离的虚拟环境,但由于某种原因,在django的shell中,virtualenv仍然会加载全局的site packages……
我试着清理PATH变量,直到只剩下c:\Python26\Scripts和c:\Python26。然后我创建了我的环境。
virtualenv --distribute --no-site-packages myproject
我随后激活了虚拟环境。现在的 PATH 是(已删除不相关变量):
PATH=E:\Development\django_projects\myproject\Scripts;C:\Panda3D-1.7.0\python;C:\Panda3D-1.7.0\bin;c:\python26\Scripts;
PYTHONPATH=C:\Panda3D-1.7.0\
>>> import django
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named django
让我们尝试一个我确定存在于 c:\python site-packages 目录中的模块。
>>> import BeautifulSoup
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named BeautifulSoup
太好了!没有全局网站包!那么我们继续下一个。从命令提示符中,我输入:
django-admin.py
然后它就能工作了!但是等等……我还没有安装Django。这怎么可能?
之后的事情更加奇怪……我首先将这些内容添加到virtualenv的activate.bat脚本中,以便Django可以找到我的设置。
set PYTHONPATH=E:\Development\django_projects\myproject\
set DJANGO_SETTINGS_MODULE=settings.development
现在我启动django-admin.py shell并且...
In [1]: import BeautifulSoup
In [2]: BeautifulSoup.__file__
Out[2]: 'C:\\Python26\\lib\\site-packages\\BeautifulSoup.pyc'
这怎么可能呢?
灵光一闪
在我打字的过程中,我突然明白了。.py是与我的c:\ python26 \ python.exe可执行文件配对的文件扩展名,而不是虚拟环境的扩展名!
python manage.py
Traceback (most recent call last):
File "manage.py", line 2, in <module>
from django.core.management import execute_manager
ImportError: No module named django.core.management
嘿。有没有人知道如何将.py文件扩展名与我的虚拟环境的Python可执行文件关联起来,而不是系统定义的Python可执行文件?