virtualenvwrapper: когда `workon` переходит в каталог проекта?

Я использую http://virtualenvwrapper.readthedocs.io/ для управления своей средой. Я создаю свои проекты с -a <path-to-project> аргумент и PROJECT_HOME не установлен, потому что мои проекты не имеют общего пути. VIRTUALENVWRAPPER_WORKON_CD установлен в 1 хотя и действительный .project Файл существует в виртуальных средах.

Когда я использую workon Эта команда иногда изменяет рабочий каталог на путь проекта, в то время как в других случаях каталог остается прежним, несмотря на то, что среда активирована правильно.

Так когда и как каталог меняется через workon происходит? И есть ли вещи, которые я должен сделать / установить, чтобы это работало?

1 ответ

Решение

У меня есть небольшое решение, хотя вроде хаки

  1. Перейдите в папку, в которой находится эта переменная, $VIRTUALENVWRAPPER_HOOK_DIR указывает на. Вам может потребоваться находиться в виртуальной среде, чтобы увидеть эту переменную, но обычно она имеет то же значение, что и $WORKON_HOME
  2. В этой папке вы должны увидеть скрипт postactivate
  3. Добавьте это как последнюю строку в сценарии: cdproject

Теперь это то, что каждый раз, когда вы печатаете workon <project_name> этот сценарий будет запущен после активации виртуальной среды, и каталог, в котором вы работали, переключится на каталог для этого проекта.

Подробнее о хуках жизненного цикла смотрите здесь!

НОТА

Я не полностью протестировал это, чтобы убедиться, что он работает независимо от того, как был создан проект, но чтобы убедиться, что он работает, я рекомендую создавать ваши виртуальные среды с mkvirtualenv -a <env_name> или если среда существует и ее активная среда, перейдите в папку проекта и запустите setvirtualenvproject , Теперь в следующий раз вы попытаетесь сделать workon ..., скрипт включится и перенесет вас в папку вашего проекта

добавление

Поскольку это сценарий оболочки, вы можете сделать несколько хитрых настроек, кроме одной этой строки. Например, вы можете захотеть сделать что-то, только если активированный проект имеет определенный шаблон или часть определенной группы проектов. Оформить заказ некоторых $VIRTUALENVWRAPPER_* переменные, чтобы увидеть, какую другую полезную информацию вы можете получить

Setvirtualenvproject теперь называется setprojectdir. Чтобы использовать текущий каталог, напишитеsetprojectdir .

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