Pull to refresh

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

Reading time 2 min
Views 6.7K

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


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


  • Надо ли вообще этот проект писать на 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.
  • Значения настроек по умолчанию.
  • Включение и выключение фич в коде (маркетологи, продакт менеджеры и тестировщики будут рады).
  • Консольная утилита, которая позволяет менять настройки проекта на лету, не трогая руками код.
Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
+7
Comments 6
Comments Comments 6

Articles