目录:
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 中。
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 类默认值。
↶ 返回首页 ↶