Windows上的django-admin.py和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. 为什么django-admin.py报告1.2.3版本,如果当前的Python(虚拟)环境安装了django 1.2.4?
  2. venv处于活动状态时,如何自动使用Django的1.2.4 django-admin.py?

附加信息:

  • virtualenv版本:1.5.1,Python版本2.7
  • 命令用于创buildvenvC:\dev\> virtualenv --no-site-packages venv
  • (venv) C:\> echo %PATH%

    C:\dev\venv\Scripts; ...other paths...

  • django-admin.py的shebang: #!C:\dev\Scripts\python.exe

希望你能帮忙,非常感谢。

这是因为你的Windows与全局安装的python.exe有关联的.py扩展名。 因此,当你输入django-admin.py ,即使你在virtualenv中,全局python也会被调用,然后它会在你自己的站点包中找到你的全局django安装。 试试python django-admin.py来规避关联。

正如shanyu已经解释的那样,这是因为* .py文件关联到你的Python安装可执行文件而不是你的virtualenv。 但是,为了回答第二个问题,我通过在virtualenv的Scripts目录中创建一个django-admin.bat来解决这个问题。 它的内容?

 @echo off python %VIRTUAL_ENV%\Scripts\django-admin.py %* 

现在你可以使用django-admin startproject <project_name> 。 在激活环境时,必须已经通过virtualenv正确设置了必需的PATHVIRTUAL_ENV环境变量。

我只是键入django-admin ,没有.py文件扩展名,并为我工作。

我不得不在我的项目中将“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”更改文件类型关联。

当我尝试使用一个已经存在的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版本),当然这是很多的输入。

我使用菲利普·尼尔森的解决方案,但不得不为我的文件名中的空格添加引号:

python“%VIRTUAL_ENV%\ Scripts \ django-admin.py”%*