Virtualenv продолжает загружать глобальные пакеты сайтов в Windows

Я посмотрел вокруг на SO, и ответы, которые я нашел на мою проблему, еще не позволили мне решить ее.

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

Я пытался очистить переменные PATH, пока не остались только c:\Python26\Scripts и c: \ Python26. Затем я создаю свою среду.

virtualenv --distribute --no-site-packages myproject

Затем я активирую virtualenv. ПУТЬ сейчас (ненужные перемены списаны):

PATH=E:\Development\django_projects\myproject\Scripts;C:\Panda3D-1.7.0\python;C:\Panda3D-1.7.0\bin;c:\python26\Scripts;

PYTHONPATH=C:\Panda3D-1.7.0\

Все идет нормально. Я запускаю питон...

>>> import django
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    ImportError: No module named django

Давайте просто попробуем модуль, который, я уверен, находится в моей директории site-packages c:\python.

>>> import BeautifulSoup
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named BeautifulSoup

Ура! Нет глобальных пакетов сайта! Тогда к следующему. В командной строке я набираю:

django-admin.py

И это работает! Но подождите... Я еще не установил Django. Как это возможно?

После этого это становится еще более странным... Сначала я добавляю их в скрипт activ.bat virtualenv, чтобы Django мог найти мои настройки.

set PYTHONPATH=E:\Development\django_projects\myproject\
set DJANGO_SETTINGS_MODULE=settings.development

Теперь я запускаю оболочку django-admin.py и

In [1]: import BeautifulSoup
In [2]: BeautifulSoup.__file__
Out[2]: 'C:\\Python26\\lib\\site-packages\\BeautifulSoup.pyc'

Как это вообще возможно?

Вспышка понимания

Набирая это, я вдруг получаю это..py - это расширение файла в сочетании с моим исполняемым файлом c:\python26\python.exe, а не virtualenv!

python manage.py
Traceback (most recent call last):
  File "manage.py", line 2, in <module>
    from django.core.management import execute_manager
ImportError: No module named django.core.management

Хех. У кого-нибудь есть идеи, как связать расширение файла.py с исполняемым файлом python моего virtualenv вместо определяемого системой исполняемого файла python?

3 ответа

Решение

Немного дополнительной хакерской атаки.bat может легко это исправить. Мои стандартные дополнения для активации.bat:

REM custom venv settings
set PYTHONPATH=%\VIRTUAL_ENV%;%\VIRTUAL_ENV%\conf;%\VIRTUAL_ENV%\apps
set DJANGO_SETTINGS_MODULE=settings

ftype Python.File=%VIRTUAL_ENV%\Scripts\python.exe %1 %*

и деактивировать.bat

REM restore ftype
ftype Python.File=C:\tools\Python27\python.exe %1 %*

Вы можете создать файл.bat и изменить там PATH и PYTHONPATH, а затем запустить.py из этого файла.bat. Как то так думаю

set PATH=C:\Python26; python myfile.py

Конечно, добавьте что-нибудь еще на ваш путь, который вы хотите.

У меня были те же проблемы "Отказано в доступе", что и у Дэна с ответом m0nonoke на мою установку Windows 7 с использованием cmd.exe.

Но я нашел эту работу, используя замену оболочки TCC/LE и настроенный файл запуска...

Под рабочим каталогом создайте подкаталог config. В этом каталоге создайте файл запуска для TCC/LE с именем tcstart.btm

@echo off
rem Override system python binding to handle virtualenvironments
set .py;.pyc=python.exe

Теперь создайте (скопируйте) ярлык TCC/LE на рабочем столе и переименуйте его соответствующим образом. Откройте Свойства для ярлыка и добавьте в цель "C:\django\config\tcstart.btm". Возможно, вы хотите установить Start в нечто полезное, например, C: \ django

Решение, найденное в этом руководстве по установке Django и Windows.

Другие вопросы по тегам