如何获取实例化BaseSettings对象后的_env_file参数值?
如何获取实例化BaseSettings对象后的_env_file参数值?
嘿,这个问题我刚好碰到过,其实不用重写__init__就能搞定,Pydantic本身是会追踪这个参数值的,不过得看你用的是V1还是V2版本,方式略有不同:
Pydantic V1 版本
在V1里,你直接通过实例的__config__属性就能拿到这个路径,比如:
settings = Settings(_env_file='some/path/prod.env', _env_file_encoding='utf-8') print(settings.__config__.env_file) # 这里就会输出 'some/path/prod.env'
顺带一提,__config__里还存着你传入的_env_file_encoding这类配置参数,需要的话也能直接取。
Pydantic V2 版本
到了V2,Pydantic的配置体系做了更新,现在得从model_config里获取:
settings = Settings(_env_file='some/path/prod.env', _env_file_encoding='utf-8') print(settings.model_config.get('env_file')) # 同样能拿到目标路径
编码参数也可以用settings.model_config.get('env_file_encoding')获取。
更稳妥的跨版本方案
要是你担心依赖内部属性后续版本会变,也可以在Settings类里显式加个字段来存这个路径,完全不用改__init__:
from pydantic import BaseSettings, Field class Settings(BaseSettings): env_file_path: str = Field(..., env='ENV_FILE_PATH') # 既可以从环境变量读,也能手动传 class Config: env_file = None # 默认不指定,实例化时再传 # 实例化时同步传入_env_file和自定义字段 settings = Settings( _env_file='some/path/prod.env', _env_file_encoding='utf-8', env_file_path='some/path/prod.env' ) print(settings.env_file_path) # 直接读取自定义字段就行
这种方式虽然需要手动同步两个参数,但胜在完全不依赖Pydantic内部逻辑,稳定性拉满。
备注:内容来源于stack exchange,提问作者red888
相关产品推荐
相关产品推荐

