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

Senpos
01.07.2019 09:40Давно уже пользуюсь, очень удобная штука.
Позволяет разделить обычные настройки из файла, сикреты и переменные окружения, но использовать для чтения один интерфейс без лишних заморочек.
Рекомендую попробовать.
          
 
nad_oby
Как же я отстал от жизни.
Теперь и конфиги стали с вистом и гимназистками.
Надо будет попробовать в следующий раз как потребуется конфигурация.
А есть тут кто, кто пользовался и имеет мнение?