You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pydantic未优先读取OS环境变量,求无需重启环境的解决方案

问题原因分析

你遇到的核心问题是环境变量名称匹配错误:

  • 你的Config类设置了env_prefix='DEV_',这意味着Pydantic会自动为所有字段的环境变量名添加该前缀,除非字段单独指定env_alias。
  • 你给STAGE字段用了validation_alias='STAGE',这个别名仅用于数据验证时的字段映射,不影响环境变量的查找逻辑。所以Pydantic实际在操作系统中查找的是DEV_STAGE,而非你设置的STAGE,自然读取不到你导出的环境变量,只能使用.env文件中的值。
解决方案

提供两种无需重启环境的解决办法,任选其一即可:

方案1:给STAGE字段指定环境变量别名

修改STAGE字段的配置,将validation_alias替换为env_alias,让Pydantic直接读取操作系统中的STAGE变量(忽略env_prefix):

from pydantic import Field
from pydantic_settings import BaseSettings, SettingsConfigDict

from devtools import debug


class Config(BaseSettings):
    # Environment
    STAGE: str = Field('prod', env_alias='STAGE')  # 替换为env_alias
    OTHER: str

    model_config = SettingsConfigDict(env_file='.test.env', env_file_encoding='utf-8', env_prefix='DEV_')


settings = Config()
debug(settings)

方案2:带前缀导出环境变量

按照env_prefix的规则,导出带DEV_前缀的环境变量:

export DEV_STAGE=dev
验证效果

修改后运行代码,STAGE的值会优先使用操作系统中设置的dev,而非.env文件中的test,符合Pydantic Settings的优先级规则:操作系统环境变量 > .env文件值 > 默认值。

内容的提问来源于stack exchange,提问作者Paul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 18:04:56