在我的系统中,系统安装了Django 1.2.3:
C:\>python -c "import django; print django.get_version()"
1.2.3
C:\>django-admin.py --version
1.2.3
然后在C:\ dev中有一个名为 venv 的虚拟环境,我安装了Django 1.2.4:
C:\> dev\venv\Scripts\activate.bat
(venv) C:\> python -c "import django; print django.get_version()"
1.2.4
(venv) C:\> django-admin.py --version
1.2.3
我的问题:
其他信息:
C:\dev\> virtualenv --no-site-packages venv
(venv) C:\> echo %PATH%
C:\dev\venv\Scripts; ...other paths...
venv中的django-admin.py的shebang :#!C:\dev\Scripts\python.exe
希望你能提供帮助,非常感谢。
答案 0 :(得分:19)
这是因为您的Windows已将.py
扩展名与全局安装的python.exe
相关联。因此,当您键入django-admin.py
时,即使您处于virtualenv中,也会调用全局python,然后它会在自己的站点包中找到您的全局django安装。请尝试python django-admin.py
来规避关联。
答案 1 :(得分:17)
正如shanyu已经解释的那样,这是因为你的Python安装可执行文件而不是你的virtualenv的* .py文件关联。但是,为了以不同的方式回答您的第二个问题,我通过在virtualenv的django-admin.bat
目录中创建Scripts
来解决此问题。它的内容?
@echo off
python %VIRTUAL_ENV%\Scripts\django-admin.py %*
现在您可以使用django-admin startproject <project_name>
。激活环境时,virtualenv应该已经正确设置了必要的PATH
和VIRTUAL_ENV
环境变量。
答案 2 :(得分:1)
当我尝试使用已经存在的django项目并使用以后安装的 virtualenv时,我在linux上遇到了类似的问题。
django 1.2.4的django-admin.py在您的路径上是不,但django 1.2.3安装的django-admin.py是否可能?
这可以解释你的输出
C:\> dev\venv\Scripts\activate.bat
(venv) C:\> python -c "import django; print django.get_version()"
1.2.4
(venv) C:\> django-admin.py --version
1.2.3
因为python
命令位于virtualenv的路径上,但django-admin.py
文件可能不是。
关于你的第二个问题(假设我上面的猜测是正确的):sym-link django-admin.py
文件到你的C:\dev\venv\Scripts
目录,虽然我不确定它在windows上是如何工作的(你使用的是Cygwin的?)。
当然你总是可以将它称为python C:\path\to\django-admin.py
(因为调用了正确的python版本),但当然这是很多打字。
答案 3 :(得分:1)
我刚刚输入 django-admin ,没有.py文件扩展名,并为我工作。
答案 4 :(得分:1)
我必须在我的项目中将“global python.exe”指向我的virtualenv,所以我创建了自己的activate.cmd
set THE_PATH=c:\my-envs\my-specific-env\Scripts
ftype Python.File="%THE_PATH%\python.exe" %%1 %%*
%THE_PATH%\activate.bat
它使用windows命令'ftype'更改文件类型关联。
答案 5 :(得分:0)
我使用了Philip Nelson的解决方案,但必须在我的文件名中添加空格引号:
python“%VIRTUAL_ENV%\ Scripts \ django-admin.py”%*