Найстройки и Переменные Окружения¶
В большинстве случаев вашему приложению необходимы внешние настройки или конфигурация, например, данные для подключения к брокеру сообщений или базе данных.
Для этих целей обычно используют переменные окружения, которые затем потребляются вашим приложением и используются для настройки.
Pydantic Settings
¶
К счастью, Pydantic предоставляет возможность захватывать переменный окружения и использовать их для настроек Pydantic: Settings management.
Install pydantic-settings
¶
Для начала установите pydantic-settings
:
$ pip install pydantic-settings
---> 100%
Info
В Pydantic v1 эти настройки включены в состав основного пакета. Но сейчас они поставляются как отдельный пакет, так что вы можете выбрать, нужна вам эта функиональность или нет.
Создайте объект Settings
¶
Импортируйте BaseSettings
из Pydantic и создайте его наследника, также как вы это делаете для Pydantic BaseModel.
Точно также вы можете объявить атрибуты класса с их аннотацией и значениями по умолчанию.
Вы можете использовать те же самые преимущества и инструмента для валидации, что и для Pydantic моделей, например, валидация с помощью Field()
.
config.py | |
---|---|
1 2 3 4 5 6 7 |
|
Info
В Pydantic v1 вы можете импортировать BaseSettings
прямо из pydantic
вместо pydantic_settings
.
config.py | |
---|---|
1 2 3 4 5 6 7 |
|
Затем, создайте объект класса Settings
, Pydantic прочитает переменные окружения (регистронезависимо), так что, переменные вроде APP_NAME
будут распознаны как поле app_name
вашего класса.
Затем Pydantic провалидирует полученные значения, поэтому ваши строковые значения из переменных окружения будут приведены к указанному в аннотации Settins
типу.
Используйте settings
¶
Теперь вы можете использовать объект settings
в вашем приложении:
serve.py | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 |
|
Запустите приложения¶
Теперь вы можете запустить ваше приложение с указанием переменных окружения, например URL
:
$ URL="amqp://guest:guest@localhost:5672" propan run serve:app
Tip
Для установки нескольких переменных окружения для одной просто разделите их пробелом и поместите перед самой командой.
Чтение .env
файла¶
Если у вас есть множество настроек, которые необходимо изменять, или просто несколько наборов окружений, может быть полезно объединить все переменные и прочитать их из одного файла.
Эта практика достаточно распространена: все переменные окружения помещаются в файл .env
, который принято называть "dotenv".
Tip
Файлы, начинающиеся с точки (.
) являются скрытыми в Unix системах, например Linux и macOS.
Но "dotenv" не обязательно должен иметь такое имя.
Pydantic имеет поддержку чтения настроек из таких файлов через установку внешней зависимости python-dotenv. Мы можете прочитать об этом больше в документации Pydantic Settings: Dotenv (.env) support.
Tip
Для того, чтобы это работало, установите pip install python-dotenv
.
Файл .env
¶
Представим файл .env
следующего содержания:
URL="amqp://guest:guest@localhost:5672"
QUEUE="test-queue"
Читаем данные из .env
¶
Обновите ваш config.py
следующим образом:
1 2 3 4 5 6 7 |
|
Так вы сможете указывать, какой именно .env
файл использовать прямо из вашего терминала. Это может быть очень полезно при тестировании или развертывании приложения на продакшене.
Note
В нашем случае Pydantic пытается найти .env
файл по умолчанию, но ошибки не возникнет, если такого файла нет. Pydantic просто использует значения ваших полей по умолчанию.
Вабор .env
file at start¶
Теперь вы можете выбирать различные файлы настроек прямо при запуске вашего приложения:
$ ENV=.local.env propan run serve:app
Или, например, настройки для продакшена
$ ENV=.production.env propan run serve:app
Или даже тестовое окружение
$ ENV=.test.env pytest