Virtualenv продолжает загружать глобальные пакеты сайтов в Windows - PullRequest
7 голосов
/ 06 ноября 2010

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

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

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

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

Затем я активирую virtualenv. PATH теперь (ненужные переменные списаны):

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\

Пока все хорошо. Я запускаю Python ...

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

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

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

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

django-admin.py

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

После этого он становится еще более странным ... Сначала я добавляю их в скрипт virt.alenv activ.bat, чтобы 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 ]

11 голосов
/ 02 марта 2011

Немного дополнительной хакерской атаки .bat может легко это исправить.Мои стандартные дополнения к activ.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 %*

и deactivate.bat

REM restore ftype
ftype Python.File=C:\tools\Python27\python.exe %1 %*
0 голосов
/ 12 июня 2013

У меня были те же проблемы «Доступ запрещен», что и у Дэна с ответом 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: \ Джанго \ Config \ tcstart.btm». Вы, вероятно, хотите установить Start в что-то полезное, например, C: \ django

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

0 голосов
/ 26 ноября 2010

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

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

Конечно, добавь на свой путь что-нибудь еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...