Есть такие тулзовины — virtualenv и virtualenvwrapper, которыми я достаточно активно пользуюсь, как и любой вменяемый питонаст. Так вот, я уже джва года жду такую фичу: чтобы когда активируешь виртуальное окружение, автоматом переходить в папку с репозиторием.
И даже знал как это сделать. Но лень была сильнее до сегодняшнего дня. Благо с именованием репозиториев и виртуальных окружений у меня проблем нет — имена совпадают (локально — по имени проекта и называется окружение, на хостинге — проекты я клонирую так, чтобы их папка соответствовала основному доменному имени, по которому проект будет доступен). Ну и проекты соответственно нигде не разбросаны, а все хранятся в одном месте (локально, например, в ~/repos).
Если у вас всё организованно плюс-минус так же, то остаётся написать только простенький postactivate hook. Открыаем в редакторе соответсвующий файл (vim $WORKON_HOME/postactivate) и дописываем в него всего одну строку:
1 | cd ~/repos/`basename $VIRTUAL_ENV` |
И теперь каждый раз, когда мы будем выполнять команды workon <venv name>, после активации нас автоматом перебросит в папку ~/repos/<venv name>.
Стоит отметить, что есть альтернативный подход, который вы можете найти в доках самого virtualenv’а — если вы храните своё виртуальное окружение в той же папке, что и сам проект (часто это бывает папка .venv), то можно подправить конфиги вашего shell’а и настроить автоматическую активацию окружения при переходе в папку и деактивацию соответственно при выходе из неё. Но мне это подходит в меньшей степени.
Update
Скриптик ниже позволит не переходить в корневую папку проекта, если workon выполняется и так внутри одной из поддиректорий проекта.
1 2 3 4 5 | if [[ `pwd` != `echo ~`/repos/`basename $VIRTUAL_ENV`/* ]]; then cd ~/repos/`basename $VIRTUAL_ENV` 2> /dev/null fi |