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

时间:2010-11-06 10:38:26

标签: windows virtualenv

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

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

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

virtualenv --distribute --no-site-packages myproject

然后我激活了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;

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可执行文件?

3 个答案:

答案 0 :(得分: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 %*

和deactivate.bat

REM restore ftype
ftype Python.File=C:\tools\Python27\python.exe %1 %*

答案 1 :(得分:0)

您可以创建.bat文件并在其中修改PATH和PYTHONPATH,然后从该.bat文件运行.py。 我认为这样的事情

set PATH=C:\Python26; python myfile.py

当然,在你想要的路径上添加任何其他内容。

答案 2 :(得分:0)

我使用cmd.exe在我的Windows 7安装程序中使用m0nonoke的答案与Dan有相同的“拒绝访问”问题。

但我发现这可以使用替换shell TCC/LE和自定义启动文件......

  

在工作目录下创建子目录配置。在这个目录中   为TCC / LE创建一个名为tcstart.btm的启动文件

@echo off
rem Override system python binding to handle virtualenvironments
set .py;.pyc=python.exe
     

现在在桌面上创建(复制)TCC / LE快捷方式并重命名   适当。打开属性以获取快捷方式并添加到Target   “C:\ Django的\ CONFIG \ tcstart.btm”。您可能希望将“开始”设置为   有用的东西,比如C:\ django

本指南中有关安装Django and Windows的解决方案。