Windows上的django-admin.py和virtualenv问题

时间:2011-01-29 15:18:06

标签: python windows django django-admin virtualenv

在我的系统中,系统安装了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

我的问题:

  1. 如果当前的Python(虚拟)环境安装了django 1.2.4,为什么django-admin.py会报告版本1.2.3?
  2. venv 处于活动状态时,如何自动使用Django的1.2.4 django-admin.py?
  3. 其他信息:

    • virtualenv版本:1.5.1,Python版本2.7
    • 用于创建 venv 的命令: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

    希望你能提供帮助,非常感谢。

6 个答案:

答案 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应该已经正确设置了必要的PATHVIRTUAL_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”%*