django-admin.py и проблема virtualenv в Windows

в моей системе установлен Django 1.2.3 общесистемный:

C:>python -c "import django; print django.get_version()"
1.2.3
C:>django-admin.py --version
1.2.3

тогда есть виртуальная среда под названием venv in C:dev где я установил Django 1.2.4:

C:> devvenvScriptsactivate.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. как я могу использовать 1.2.4 Django django-admin.py автоматически, когда venv is активен?

дополнительная информация:

  • версия virtualenv: 1.5.1, Python версии 2.7
  • команда, используемая для создания venv: C:dev> virtualenv --no-site-packages venv
  • (venv) C:> echo %PATH%

    C:devvenvScripts; ...other paths...

  • shebang django-admin.py в venv: #!C:devScriptspython.exe

надеюсь, что вы можете помочь, большое спасибо.

6 ответов


это потому, что ваша windows связана чтобы обойти ассоциацию.


как шанью уже объяснил, это из-за *.ассоциации файлов py, сделанные для вашего исполняемого файла установки Python вместо virtualenv. Однако, чтобы ответить на ваш второй вопрос по-другому, я решил эту проблему, создав django-admin.bat в . Его содержимое?

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

теперь вы можете использовать django-admin startproject <project_name>. Необходимое PATH и VIRTUAL_ENV переменные среды уже должны были быть правильно установлены virtualenv при активации окружающая среда.


Я только что набрал django-admin, без .расширение файла py, и работал на меня.


Я должен был указать " глобальный 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".


у меня была аналогичная проблема в linux, когда я пытался использовать уже выходящий проект django С установлен virtualenv.

возможно ли, что django-admin.py из django 1.2.4 является не на вашем пути, но это django-admin.py из вашей установки django 1.2.3?

это объясняет ваш выход из

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 в своем C:\dev\venv\Scripts каталог, хотя я не уверен, как это работает в windows (вы используете Cygwin?).

конечно, вы всегда можете назвать это как python C:\path\to\django-admin.py (так как называется правильная версия python), но, конечно, это много ввода.


Я использовал решение Филипа Нельсона, но должен был добавить кавычки для пробелов в моем имени файла:

python "%VIRTUAL_ENV%\Scripts\django-admin.py"%*