Сайт проекта: https://direnv.net/
Какую проблему решает direnv?
При работе над проектами на Python часто используют виртуальные окружения. Работа с виртуальными окружениями состоит из нескольких этапов:
-
Создание:
python -m venv .venv/Эта команда создаст в текущем каталоге подкаталог
.venv/и разместит виртуальное окружение в нём. Эту операцию нужно выполнить всего один раз. -
Активация:
source .venv/bin/activate -
Работа.
Сюда входит установка пакетов, написание кода, его запуск и так далее. Главное, чтобы всё это выполнялось в активном виртуальном окружении, иначе ваш проект не найдёт нужные библиотеки Python, или найдёт, но не те.
-
Деактивация.
Поработали и хватит, пора вернуть всё как было.
Чаще всего приходится выполнять операцию активации. Что теперь, каждый раз при переходе в каталог вводить команду активации?
Вообще не обязательно. Можно написать скрипт, который будет это делать, назовём его activate-venv.sh:
source .venv/bin/activate
Теперь при переходе в каталог нужно наш скрипт запустить:
./activate-venv.sh
За счёт автодополнения уже лучше чем ручной ввод команды. Однако, ещё недостаточно автоматизированно.
Рассмотрим ещё одну проблему — переменные окружения. Иногда нужно что-то добавить в PATH, или вовсе создать новую переменную. Согласитесь, обе операции довольно утомительные. А если переменных много? Допустим, столько:
export ANSIBLE_HOME=/opt/umbrella/ansible
export ANSIBLE_PIPELINING=1
export ANSIBLE_ASK_PASS=1
export ANSIBLE_BECOME=1
export ANSIBLE_BECOME_USER=redqueen
Как только мы покинем каталог, было бы здорово сбросить значения или вовсе избавиться от этих переменных. Вызывать unset несколько раз?
Настройка
direnv решает описанные выше проблемы переменных и скриптов следующим образом:
-
Установите утилиту. Это можно сделать с помощью системного менеджера пакетов или с помощью скрипта с сайта разработчиков.
-
В нужном каталоге создайте файл
.envrc. -
Добавьте в
.envrcкоманды, изменяющие значения нужных переменных окружения. -
Разрешите утилите
direnvиспользовать созданный файл для управления переменными окружения:direnv allow
С этой минуты при переходе в нужный каталог содержимое .envrc будет выполняться автоматически. Разумеется, нужно только настроить оболочку командной строки. Если вы используете Bash, добавьте в .bashrc строку:
eval "$(direnv hook bash)"