在我的系统中有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
我的问题:
附加信息:
C:\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正确设置了必需的PATH
和VIRTUAL_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”%*