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

11 投票
6 回答
4463 浏览
提问于 2025-04-16 10:50

在我的系统中,安装了全局的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
  • 创建venv时使用的命令:C:\dev\> virtualenv --no-site-packages venv
  • (venv) C:\> echo %PATH%

    C:\dev\venv\Scripts; ...其他路径...

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

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

6 个回答

1

我在Linux上遇到过类似的问题,当时我尝试使用一个已经存在的Django项目,但是是用一个后来安装的虚拟环境来运行的。

有可能你安装的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命令在你的虚拟环境的路径中,但django-admin.py文件可能不在。

至于你的第二个问题(假设我上面的猜测是对的):可以把django-admin.py文件的符号链接放到你的C:\dev\venv\Scripts目录里,不过我不太确定在Windows上怎么操作(你是在用Cygwin吗?)。

当然,你也可以直接用python C:\path\to\django-admin.py来调用它(因为会调用正确的Python版本),但这样输入会比较麻烦。

16

正如shanyu已经解释过的,问题出在你的Python安装文件和虚拟环境之间的关联上,而不是虚拟环境本身。不过,针对你的第二个问题,我可以告诉你我怎么解决这个问题的。我在我的虚拟环境的Scripts目录下创建了一个django-admin.bat文件。这个文件里面的内容是:

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

现在你可以使用django-admin startproject <project_name>来创建项目了。激活虚拟环境时,必要的PATHVIRTUAL_ENV环境变量应该已经被正确设置好了。

19

这是因为你的Windows系统把.py这个文件后缀和全局安装的python.exe关联在了一起。所以当你输入django-admin.py的时候,即使你在虚拟环境中,系统还是调用了全局的Python,这样它就会找到你全局安装的Django包。你可以试试输入python django-admin.py来绕过这个关联。

撰写回答