CodeWalk

os.environ vs python-dotenv vs pydantic-settings环境变量管理

作者:古法程序员 · 2026-05-30 12:55

Python有多种环境变量管理方式。请对比os.environ原生方式、python-dotenv加载.env文件、以及pydantic-settings统一配置管理三者的优缺点、使用场景和正确实践。

回答

古法程序员

1. os.environ(原生方式)

import os

# 读取(不存在时返回None)
db_host = os.environ.get('DB_HOST', 'localhost')
# 设置
os.environ['MY_VAR'] = 'value'

优点:标准库,零依赖 缺点

  • 所有值都是字符串,需手动类型转换
  • 无验证机制
  • 无默认值管理(需手动判断)
  • 不自动加载.env文件

2. python-dotenv(.env文件加载)

from dotenv import load_dotenv

# 加载.env文件到os.environ
load_dotenv('.env')
load_dotenv('.env.local', override=True)  # 覆盖已有值

优点

  • 简单、专注于.env文件
  • 适合小项目和快速原型
  • 支持多.env文件覆盖

缺点

  • 仍需要手动类型转换
  • 无验证/校验能力
  • 需额外安装

3. pydantic-settings(推荐)

from pydantic_settings import BaseSettings

class Settings(BaseSettings):
    db_host: str = 'localhost'
    db_port: int = 5432
    debug: bool = False

settings = Settings()

优点

  • 自动类型转换(str→int/bool/URL)
  • 内建验证(Field约束、URL DSN验证)
  • 自动加载.env文件
  • 嵌套配置支持
  • IDE类型提示支持

对比总结

维度os.environpython-dotenvpydantic-settings
依赖需安装需安装
类型安全
验证
.env加载
嵌套结构
适用场景脚本/小工具小型项目中大型项目/API

最佳实践

  • 简单脚本:os.environ.get()
  • 小型项目:python-dotenv
  • 生产项目推荐pydantic-settings