virtualenvwrapper: когда `workon` переходит в каталог проекта?
Я использую http://virtualenvwrapper.readthedocs.io/ для управления своей средой. Я создаю свои проекты с -a <path-to-project>
аргумент и PROJECT_HOME
не установлен, потому что мои проекты не имеют общего пути. VIRTUALENVWRAPPER_WORKON_CD
установлен в 1
хотя и действительный .project
Файл существует в виртуальных средах.
Когда я использую workon
Эта команда иногда изменяет рабочий каталог на путь проекта, в то время как в других случаях каталог остается прежним, несмотря на то, что среда активирована правильно.
Так когда и как каталог меняется через workon
происходит? И есть ли вещи, которые я должен сделать / установить, чтобы это работало?
1 ответ
У меня есть небольшое решение, хотя вроде хаки
- Перейдите в папку, в которой находится эта переменная,
$VIRTUALENVWRAPPER_HOOK_DIR
указывает на. Вам может потребоваться находиться в виртуальной среде, чтобы увидеть эту переменную, но обычно она имеет то же значение, что и$WORKON_HOME
- В этой папке вы должны увидеть скрипт
postactivate
- Добавьте это как последнюю строку в сценарии:
cdproject
Теперь это то, что каждый раз, когда вы печатаете workon <project_name>
этот сценарий будет запущен после активации виртуальной среды, и каталог, в котором вы работали, переключится на каталог для этого проекта.
Подробнее о хуках жизненного цикла смотрите здесь!
НОТА
Я не полностью протестировал это, чтобы убедиться, что он работает независимо от того, как был создан проект, но чтобы убедиться, что он работает, я рекомендую создавать ваши виртуальные среды с mkvirtualenv -a <env_name>
или если среда существует и ее активная среда, перейдите в папку проекта и запустите setvirtualenvproject
, Теперь в следующий раз вы попытаетесь сделать workon ...
, скрипт включится и перенесет вас в папку вашего проекта
добавление
Поскольку это сценарий оболочки, вы можете сделать несколько хитрых настроек, кроме одной этой строки. Например, вы можете захотеть сделать что-то, только если активированный проект имеет определенный шаблон или часть определенной группы проектов. Оформить заказ некоторых $VIRTUALENVWRAPPER_*
переменные, чтобы увидеть, какую другую полезную информацию вы можете получить
Setvirtualenvproject теперь называется setprojectdir
. Чтобы использовать текущий каталог, напишитеsetprojectdir .