Мелкая питонячая радость #5: Dynaconf — управление настройками в проекте

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


    К популярным темам относятся вопросы:


    • Надо ли вообще этот проект писать на Python?
    • Какой фреймворк взять для разработки?
    • Кто быстрее, библиотека X или библиотека Y?

    Сегодня я попробую аккуратно подковырнуть как раз одну из таких магических тем — вопрос "Как управлять конфигами в проекте?".



    Очевидно, способов сконфигурить питонячую программу есть предостаточно


    • Переменные окружения (вместе с .env файлами до кучи).
    • Всяческие специализированные файлы в форматах yaml, json, xml, ini.
    • *.py файлы с классами или "константами".
    • configparser из стандартной библиотеки Python.
    • Самописные решения на основе классов, модулей, файлов, телепатии, черной магии (или всего вместе).
    • Встроенные в фреймворки менеджеры конфигов (как, например, во Flask).

    Способов достаточно, можно выбрать что угодно и пользоваться. Но прогресс бы остановился, если бы люди не пытались улучшать и оптимизировать все подряд (в том числе и то, что уже работает давно и с приемлемым качеством). Руки энтузиастов дошли, наконец, и до конфигов Python приложений.


    Так появился dynaconf


    Разработчики особенно не парились с изобретением своих хитрых подходов и собрали под крышей одной либы сразу все популярные методы работы с настройками.


    • Можно читать файлы (.json, .ini, yaml и новомодный .toml, с которым тоже стоит познакомиться)
    • Можно подцеплять переменные окружения и .env файлы
    • Можно использовать внешние хранилища и сервисы (от простого Redis, до специальных secure storage с паролями)
    • Все это успешно само мерджится с конфигами фреймворков Flask и Django.

    И, конечно же, поверх добавили набор плюшек, который облегчает жизнь в любом проекте


    • Легкое переключение окружений dev/staging/testing/production.
    • Значения настроек по умолчанию.
    • Включение и выключение фич в коде (маркетологи, продакт менеджеры и тестировщики будут рады).
    • Консольная утилита, которая позволяет менять настройки проекта на лету, не трогая руками код.
    Поддержать автора
    Поделиться публикацией

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

      0

      Как же я отстал от жизни.
      Теперь и конфиги стали с вистом и гимназистками.
      Надо будет попробовать в следующий раз как потребуется конфигурация.


      А есть тут кто, кто пользовался и имеет мнение?

        0

        Да, довольно классная штука. Особенно удобно, что при желании можно засунуть ее в различные фреймворки и наступит радость :)

        0
        Храню в json и читаю ручками, но интересно попробовать
          +1
          Давно уже пользуюсь, очень удобная штука.

          Позволяет разделить обычные настройки из файла, сикреты и переменные окружения, но использовать для чтения один интерфейс без лишних заморочек.

          Рекомендую попробовать.
            0
            Как-то не хватает примеров использования подтверждающих реальную полезность dynaconf.

            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

            Самое читаемое