direnv

Автоматический импорт переменных и выполнение скриптов.

Сайт проекта: https://direnv.net/

Какую проблему решает direnv?

При работе над проектами на Python часто используют виртуальные окружения. Работа с виртуальными окружениями состоит из нескольких этапов:

  1. Создание:

    python -m venv .venv/
    

    Эта команда создаст в текущем каталоге подкаталог .venv/ и разместит виртуальное окружение в нём. Эту операцию нужно выполнить всего один раз.

  2. Активация:

    source .venv/bin/activate
    
  3. Работа.

    Сюда входит установка пакетов, написание кода, его запуск и так далее. Главное, чтобы всё это выполнялось в активном виртуальном окружении, иначе ваш проект не найдёт нужные библиотеки Python, или найдёт, но не те.

  4. Деактивация.

    Поработали и хватит, пора вернуть всё как было.

Чаще всего приходится выполнять операцию активации. Что теперь, каждый раз при переходе в каталог вводить команду активации?

Вообще не обязательно. Можно написать скрипт, который будет это делать, назовём его 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 решает описанные выше проблемы переменных и скриптов следующим образом:

  1. Установите утилиту. Это можно сделать с помощью системного менеджера пакетов или с помощью скрипта с сайта разработчиков.

  2. В нужном каталоге создайте файл .envrc.

  3. Добавьте в .envrc команды, изменяющие значения нужных переменных окружения.

  4. Разрешите утилите direnv использовать созданный файл для управления переменными окружения:

    direnv allow
    

С этой минуты при переходе в нужный каталог содержимое .envrc будет выполняться автоматически. Разумеется, нужно только настроить оболочку командной строки. Если вы используете Bash, добавьте в .bashrc строку:

eval "$(direnv hook bash)"
Создано при помощи Hugo
Тема Stack, дизайн Jimmy