[Solved]-Django-admin.py and virtualenv issue on Windows


This is because your windows has associated .py extension with the globally installed python.exe. Therefore when you type django-admin.py, even though you’re in a virtualenv, the global python is invoked, and it in turn finds your global django installation in its own site-packages. Try python django-admin.py to circumvent the association.



As shanyu already explained, it is because of *.py file associations made to your Python install executable instead of your virtualenv. However, to answer your second question differently, I solved this problem by creating a django-admin.bat in my virtualenv’s Scripts directory. Its contents?

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

Now you can use django-admin startproject <project_name>. The necessary PATH and VIRTUAL_ENV environment variables should have already been set correctly by virtualenv when you activated the environment.


I had a similar problem on linux when I tried to use an already exisiting django project with a later installed virtualenv.

Is it possible that django-admin.py of django 1.2.4 is not on your path but that django-admin.py of your django 1.2.3 install is?

That would explain your output from

C:\> dev\venv\Scripts\activate.bat
(venv) C:\> python -c "import django; print django.get_version()"
(venv) C:\> django-admin.py --version

because the python command is on the path of your virtualenv but the django-admin.py file might not be.

As to your second question (assuming my guess above is correct): sym-link the django-admin.py file into your C:\dev\venv\Scripts directory, although I am not sure how that works on windows (are you using Cygwin?).

Of course you can always call it as python C:\path\to\django-admin.py (since the right python version is called) but of course that is a lot of typing.



I just typed django-admin, without the .py file extension, and worked for me.


I had to point the “global python.exe” to my virtualenv in my project so I created my own activate.cmd

set THE_PATH=c:\my-envs\my-specific-env\Scripts
ftype Python.File="%THE_PATH%\python.exe" %%1 %%*

It changes the the file type association using windows command ‘ftype’.


i used Philip Nelson’s solution but had to add quotes for spaces in my filename:

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

Leave a comment