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


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


  • Надо ли вообще этот проект писать на 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.
  • Значения настроек по умолчанию.
  • Включение и выключение фич в коде (маркетологи, продакт менеджеры и тестировщики будут рады).
  • Консольная утилита, которая позволяет менять настройки проекта на лету, не трогая руками код.

Комментарии (3)


  1. nad_oby
    27.06.2019 23:07

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


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


  1. Mantikor_WRX_STi
    28.06.2019 20:22

    Храню в json и читаю ручками, но интересно попробовать


  1. Senpos
    01.07.2019 09:40

    Давно уже пользуюсь, очень удобная штука.

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

    Рекомендую попробовать.