【Python 第三方库】pydantic-settings

2024-01-25 00:00:00

目录:

pydantic-settings 模块介绍

Pydantic-Settings 模块将配置管理从繁琐的手动处理转变为类型安全、自动化的优雅过程。看下面示例会一目了然。

安装依赖:

$ pip install pydantic-settings -i https://pypi.tuna.tsinghua.edu.cn/simple

基础配置模型定义

创建一个基础的 Settings 类非常简单,就像定义普通的 Pydantic 模型一样:

from pydantic_settings import BaseSettings

class Settings(BaseSettings):
    app_name: str = "MyApp"
    debug: bool = False
    port: int = 8000

settings = Settings()
print(settings.app_name)  # MyApp
print(settings.debug)     # False
print(settings.port)      # 8000

从环境变量加载值

通过设置环境变量,可以动态覆盖默认值。

在终端中按如下命令一次设置环境变量:

# 设置环境变量
export APP_NAME="ProductionApp"
export DEBUG="true"
export PORT="9000"

完事了再去执行 setting 类,可以看到打印的值不是 Setting 类里定义的变量值,而是环境变量里定义的值。

class Settings(BaseSettings):
    app_name: str = "MyApp"
    debug: bool = False
    port: int = 8000

settings = Settings()
print(settings.app_name)  # ProductionApp(从环境变量读取)
print(settings.debug)     # True
print(settings.port)      # 9000

从 .env 中加载值

除了加载环境变量,还会自动加载 .env 中变量值,比如数据库配置等敏感信息通常会放到 .env 中。

DATABASE_URL=postgresql://localhost/mydb

建议显示指定 .env 文件路径,避免找不到。

import os
from pathlib import Path
from pydantic_settings import BaseSettings, SettingsConfigDict

class Settings(BaseSettings):
    database_url: str = ''

    model_config = SettingsConfigDict(
        # 使用 Path(__file__).parent 获取当前文件所在目录,并拼接 .env 文件名
        env_file=os.path.join(Path(__file__).parent, ".env"),
        env_file_encoding='utf-8',
        extra='ignore'  # 忽略 .env 文件中未在模型中定义的变量
    )

settings = Settings()
print(settings.database_url)      # postgresql://localhost/mydb

优先级:先找环境变量 -> 再找 .env 文件 -> 都找不到才会使用 Setting 类默认值。

返回首页

本文总阅读量  次
皖ICP备17026209号-3
总访问量: 
总访客量: