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

Pao*_*olo 11 python windows django virtualenv django-admin

在我的系统中,系统安装了Django 1.2.3:

C:\>python -c "import django; print django.get_version()"
1.2.3
C:\>django-admin.py --version
1.2.3
Run Code Online (Sandbox Code Playgroud)

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

我的问题:

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

附加信息:

  • 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

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

sha*_*nyu 19

这是因为您的Windows .py与全局安装的关联扩展python.exe.因此,当您键入时django-admin.py,即使您处于virtualenv中,也会调用全局python,然后它会在自己的站点包中找到您的全局django安装.尽量python django-admin.py避开这种关联.


小智 16

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

@echo off
python %VIRTUAL_ENV%\Scripts\django-admin.py %*
Run Code Online (Sandbox Code Playgroud)

现在你可以使用了django-admin startproject <project_name>.激活环境时,virtualenv应该已经正确设置了必要PATHVIRTUAL_ENV环境变量.