我环顾四周,发现我的问题的答案还没有让我解决它。
我想使用隔离的 virtualenv 环境,但是出于某种原因,virtualenv 在 django 的 shell 中时不断加载全局站点包...
我尝试清理 PATH 变量,直到只剩下 c:\Python26\Scripts 和 c:\Python26。然后我创建我的环境。
virtualenv --distribute --no-site-packages myproject
然后我激活 virtualenv。 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\
到目前为止,还不错。我启动 python...
>>> 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 可执行文件,而不是 virtualenv 文件扩展名!
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 文件扩展名耦合到我的 virtualenv 的 python 可执行文件而不是系统定义的 python 可执行文件?
最佳答案
一点点额外的 .bat 黑客可以轻松解决这个问题。我对 activate.bat 的标准添加是:
REM custom venv settings
set PYTHONPATH=%\VIRTUAL_ENV%;%\VIRTUAL_ENV%\conf;%\VIRTUAL_ENV%\apps
set DJANGO_SETTINGS_MODULE=settings
ftype Python.File=%VIRTUAL_ENV%\Scripts\python.exe %1 %*
并停用.bat
REM restore ftype
ftype Python.File=C:\tools\Python27\python.exe %1 %*
关于windows - Virtualenv 在 Windows 上不断加载全局站点包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4112749/