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
我有几个问题:
- 为什么django-admin.py报告的版本是1.2.3,而当前的Python(虚拟)环境中安装的是Django 1.2.4?
- 当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 个回答
我在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版本),但这样输入会比较麻烦。
正如shanyu已经解释过的,问题出在你的Python安装文件和虚拟环境之间的关联上,而不是虚拟环境本身。不过,针对你的第二个问题,我可以告诉你我怎么解决这个问题的。我在我的虚拟环境的Scripts
目录下创建了一个django-admin.bat
文件。这个文件里面的内容是:
@echo off
python %VIRTUAL_ENV%\Scripts\django-admin.py %*
现在你可以使用django-admin startproject <project_name>
来创建项目了。激活虚拟环境时,必要的PATH
和VIRTUAL_ENV
环境变量应该已经被正确设置好了。
这是因为你的Windows系统把.py
这个文件后缀和全局安装的python.exe
关联在了一起。所以当你输入django-admin.py
的时候,即使你在虚拟环境中,系统还是调用了全局的Python,这样它就会找到你全局安装的Django包。你可以试试输入python django-admin.py
来绕过这个关联。