Активируйте виртуальную среду Python, используя activ_this.py в файле fabfile в Windows. - PullRequest
4 голосов
/ 15 апреля 2010

У меня есть задача Fabric, которая требует доступа к настройкам моего проекта Django.

В Windows я не могу установить Fabric в virtualenv проекта (проблемы с Paramiko + pycrypto deps). Тем не менее, я могу установить Fabric в свои системные пакеты сайта, без проблем.

Я установил Django в проект virtualenv и могу легко использовать все команды "> python manage.py", когда активирую virtualenv с помощью сценария "VIRTUALENV \ Scripts \ activ.bat".

В моем проекте есть файл фабричных задач (fabfile.py), который предоставляет задачи для настройки, тестирования, развертывания и т. Д. Некоторые из задач в моем fabfile должны получить доступ к настройкам моего проекта django через «django». настройки импорта конф ".

Поскольку единственная полезная установка Fabric, которую я имею, находится в моих системных пакетах сайта, мне нужно активировать virtualenv в моем файле fabfile, чтобы django стал доступен. Для этого я использую модуль «activ_this» в virtualenv проекта, чтобы иметь доступ к настройкам проекта и тому подобному. Используя «print sys.path» до и после выполнения activ_this.py, я могу сказать, что путь к Python изменяется, чтобы указать на virtualenv для проекта. Однако я все еще не могу импортировать django.conf.settings.

Я смог успешно сделать это на * nix (Ubuntu и CentOS) и в Cygwin. Используете ли вы эту настройку / рабочий процесс в Windows? Если да, можете ли вы помочь мне выяснить, почему это не работает в Windows, или предоставить какие-либо советы и рекомендации для решения этой проблемы?

Спасибо и ура.


REF:

Локальная среда разработки:

  • Python 2.5.4
  • Virtualenv 1.4.6
  • Ткань 0,9,0
  • Пип 0,6,1
  • Джанго 1.1.1
  • Windows XP (SP3)

Ответы [ 2 ]

6 голосов
/ 20 апреля 2010

После некоторого копания я обнаружил, что это проблема со скриптом activ_this.py . В своем текущем состоянии, virtualenv <= 1.4.6, этот сценарий предполагает, что путь к каталогу site-packages одинаков для всех платформ. Однако путь к каталогу <strong>site-packages отличается между * nix-подобными платформами и Windows.

В этом случае сценарий activ_this.py добавляет путь в стиле * nix:

VIRTUALENV_BASE / Библиотека / python2.5 / сайт-пакеты /

к пути Python вместо определенного пути Windows:

VIRTUALENV_BASE \ Lib \ сайт-пакеты \

Я создал проблему в средстве отслеживания проблем virtualenv, в которой описана проблема и решение. Если вы заинтересованы, вы можете проверить по этому вопросу здесь: http://bitbucket.org/ianb/virtualenv/issue/31/windows-activate_this-assumes-nix-path-to-site

Надеюсь, исправление будет доступно в готовящемся выпуске virtualenv.


Если вам нужно исправить эту проблему прямо сейчас, а пакет virtualenv еще не был исправлен, вы можете «исправить» свой собственный activ_this.py, как показано ниже.

Отредактируйте свой файл VIRTUALENV \ Scripts \ activ_this.py. Измените строку (17?):

site_packages = os.path.join(base, 'lib', 'python%s' % sys.version[:3], 'site-packages')

до

if sys.platform == 'win32':
    site_packages = os.path.join(base, 'Lib', 'site-packages')
else:
    site_packages = os.path.join(base, 'lib', 'python%s' % sys.version[:3], 'site-packages')

После этого ваш скрипт activ_this.py сначала проверит, на какой платформе он запущен, а затем подгонит путь к каталогу site-packages.

Наслаждайтесь!

2 голосов
/ 15 апреля 2010

Вы должны будете выполнить активацию этого из потрясающего файла. Хотя я не проверял это, я считаю, что должно работать следующее:

activate_this = '/path/to/env/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))
...