Virtualenv в Python бесконечно удобен когда нужно изолировать окружение проекта вместе с его зависимостями. Но с ростом числа проектов, такие окружения распространяются во множестве, и со временем, в каждом проекте мы начинаем натыкаться на папки вида env, .env, myprojectenv и т.д. и т.п. Если Вы работаете локально, то это сугубо Ваши проблемы, в команде же, такой хаос мешает остальным. Ниже краткая заметка о том как максимально просто и быстро организовать свои виртуальные окружения для более удобной работы.
Почему? Потому что это как раз место для пользовательских приложений, библиотек и зависимостей в отличие от папки проекта. Называть такие окружения нужно точно так же как и проект, и тогда ни у кого не возникнет вопроса «Как найти папку с нужным окружением?». Кроме того, такая практика позволит нам организовать быстрый просмотр/активацию нужных окружений.
Как известно чтобы активировать environment нужно выполнить:
Каждый раз такое писать долго, тем более если мы сложили наш env в /opt/. Заменим это однострочником на bash:
Флаг --rcfile нужен для того, чтобы activate правильно обновил переменные окружения bash.
Всё ещё неудобно, поскольку нужно помнить имя проекта для активации окружения. Тут нам может помочь bash_completion:
Теперь набирая в консоли workon[TAB] мы увидим весь список окружений в /opt/pythonenv. Точно так же быстро активируем нужное окружение.
Спасибо за внимание, поправки/рекомендации приветствуются.
Источники:
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. Точно так же быстро активируем нужное окружение.
Спасибо за внимание, поправки/рекомендации приветствуются.
Источники: