Организуем virtualenv с помощью bash

20 Фев
2012

Virtualenv в Python бесконечно удобен когда нужно изолировать окружение проекта вместе с его зависимостями. Но с ростом числа проектов, такие окружения распространяются во множестве, и со временем, в каждом проекте мы начинаем натыкаться на папки вида env, .env, myprojectenv и т.д. и т.п. Если Вы работаете локально, то это сугубо Ваши проблемы, в команде же, такой хаос мешает остальным. Ниже краткая заметка о том как максимально просто и быстро организовать свои виртуальные окружения для более удобной работы.


1.Храним все virtualenv в opt


Почему? Потому что это как раз место для пользовательских приложений, библиотек и зависимостей в отличие от папки проекта. Называть такие окружения нужно точно так же как и проект, и тогда ни у кого не возникнет вопроса «Как найти папку с нужным окружением?». Кроме того, такая практика позволит нам организовать быстрый просмотр/активацию нужных окружений.

2.Ускоряем запуск virtualenv


Как известно чтобы активировать environment нужно выполнить:
source path_to_env/bin/activate

Каждый раз такое писать долго, тем более если мы сложили наш env в /opt/. Заменим это однострочником на bash:

>>>cat /bin/workon
#!/bin/bash
/bin/bash --rcfile /opt/pythonenv/${1}/bin/activate


Флаг —rcfile нужен для того, чтобы activate правильно обновил переменные окружения bash.

Всё ещё неудобно, поскольку нужно помнить имя проекта для активации окружения. Тут нам может помочь bash_completion:

>>>cat /etc/bash_completion.d/workon

_workon()
{
    local cur prev envs
    COMPREPLY=()
    cur="${COMP_WORDS[COMP_CWORD]}"
    prev="${COMP_WORDS[COMP_CWORD-1]}"
    envs=`ls /opt/pythonenv/`

    COMPREPLY=( $(compgen -W "${envs}" -- ${cur}) )
}
complete -F _workon workon


Теперь набирая в консоли workon[TAB] мы увидим весь список окружений в /opt/pythonenv. Точно так же быстро активируем нужное окружение.

Спасибо за внимание, поправки/рекомендации приветствуются.

Источники:
По материалам Хабрахабр.



загрузка...

Комментарии:

Наверх