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