Virtualenv继续在Windows上加载全局站点包

Lau*_*Mat 7 windows virtualenv

我已经环顾四周了,我找到问题的答案还没有让我解决它.

我想使用孤立的virtualenv环境,但出于某种原因,virtualenv在django的shell中继续加载全局站点包...

我试图清理PATH变量,直到只剩下c:\ Python26\Scripts和c:\ Python26.然后我创建我的环境.

virtualenv --distribute --no-site-packages myproject
Run Code Online (Sandbox Code Playgroud)

然后我激活virtualenv.PATH现在(无关的vars报废):

PATH=E:\Development\django_projects\myproject\Scripts;C:\Panda3D-1.7.0\python;C:\Panda3D-1.7.0\bin;c:\python26\Scripts;
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

让我们尝试一个我确定在我的c:\ python site-packages目录中的模块.

>>> import BeautifulSoup
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named BeautifulSoup
Run Code Online (Sandbox Code Playgroud)

好极了!没有全球网站套餐!然后到下一个.在命令提示符下,我输入:

django-admin.py
Run Code Online (Sandbox Code Playgroud)

它的工作原理!但是等等......我还没有安装Django.这怎么可能?

在此之后,它变得更加怪异......我首先将这些添加到virtualenv的activate.bat脚本中,以便Django可以找到我的设置.

set PYTHONPATH=E:\Development\django_projects\myproject\
set DJANGO_SETTINGS_MODULE=settings.development
Run Code Online (Sandbox Code Playgroud)

现在我启动django-admin.py shell和

In [1]: import BeautifulSoup
In [2]: BeautifulSoup.__file__
Out[2]: 'C:\\Python26\\lib\\site-packages\\BeautifulSoup.pyc'
Run Code Online (Sandbox Code Playgroud)

这怎么可能呢?

闪光的洞察力

打字时,我突然明白了..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
Run Code Online (Sandbox Code Playgroud)

嘿.任何人都知道如何将.py文件扩展名耦合到我的virtualenv的python可执行文件而不是系统定义的python可执行文件?

小智 11

一点点额外的.bat hackery可以轻松解决这个问题.我对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 %*
Run Code Online (Sandbox Code Playgroud)

并停用.bat

REM restore ftype
ftype Python.File=C:\tools\Python27\python.exe %1 %*
Run Code Online (Sandbox Code Playgroud)