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

Pydantic升级至2.6后.env文件列表配置失效问题求助

解决Pydantic 2.6中.env列表配置解析失败的问题

Pydantic从1.x升级到2.x后,BaseSettings迁移到了pydantic_settings包,同时默认的环境变量解析行为发生变化——不再自动将JSON格式的字符串解析为列表等复杂类型,这就是你遇到报错的原因。以下两种方法可恢复原有解析行为:

方法一:改用逗号分隔的.env配置(推荐)

修改.env文件中的列表格式为逗号分隔:

MY_LIST=a,b

然后在代码中给字段添加env_delimiter参数,指定用逗号分割列表元素:

from pydantic_settings import BaseSettings, SettingsConfigDict
from pydantic import Field
import os
import logging
import sys

class Settings(BaseSettings):
    my_list: list[str] = Field(..., env="MY_LIST", env_delimiter=",")

    model_config = SettingsConfigDict(
        env_file=f'{os.environ.get("ENV")}.env',
        env_file_encoding='utf-8',
        env_prefix=f'{os.environ.get("ENV")}_',
        extra='ignore'
    )

try:
    settings = Settings()
    print(settings)
except Exception as e:
    logging.critical(f"required settings not provided, shutting down - {e}")
    sys.exit(1)

方法二:保留JSON格式的.env配置

如果需要继续使用MY_LIST=["a","b"]这种JSON格式的配置,可以用pydantic.Json类型定义字段,让Pydantic自动解析JSON字符串:

from pydantic_settings import BaseSettings, SettingsConfigDict
from pydantic import Field, Json
import os
import logging
import sys

class Settings(BaseSettings):
    my_list: Json[list[str]] = Field(..., env="MY_LIST")

    model_config = SettingsConfigDict(
        env_file=f'{os.environ.get("ENV")}.env',
        env_file_encoding='utf-8',
        env_prefix=f'{os.environ.get("ENV")}_',
        extra='ignore'
    )

try:
    settings = Settings()
    print(settings)
except Exception as e:
    logging.critical(f"required settings not provided, shutting down - {e}")
    sys.exit(1)

注意:Pydantic 2.x中原Config类已被model_config替代,需用SettingsConfigDict配置环境文件等参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 23:15:32