推荐按环境分文件(如config_dev.py)+统一入口加载,支持多格式优先级合并、运行时校验与本地开发友好机制。

Python项目中配置文件的加载策略,核心在于分离环境、避免硬编码、支持优先级覆盖。不推荐把所有配置写死在代码里,也不建议只用一个config.py应对全部环境。关键是要让开发、测试、生产各用各的配置,且切换方便、不易出错。
按环境分文件 + 统一入口加载
把配置按环境拆成独立文件(如config_dev.py、config_test.py、config_prod.py),再通过一个主配置模块(如config.py)根据环境变量自动导入对应模块。
- 在config.py中读取red">ENV环境变量(默认为dev)
- 动态导入config_{ENV}.py中的配置类或字典
- 主配置模块可提供统一的get_config()函数,屏蔽加载细节
支持多种格式 + 向上兼容
实际项目中常需混合使用不同格式:数据库连接用.env(便于Docker部署),敏感密钥走环境变量,基础参数用YAML或JSON。加载时应按优先级合并:
- 最底层:默认配置(代码内建,如DEFAULT_TIMEOUT = 30)
- 中间层:环境无关配置文件(base.yaml)
- 顶层:环境专属配置 + 环境变量(覆盖同名项,例如DB_URL)
运行时校验 + 缺失提示
配置加载后立即检查关键字段是否存在、类型是否正确,而不是等到第一次使用时报KeyError或AttributeError。
立即学习“Python免费学习笔记(深入)”;
- 对必填项(如SECRET_KEY、DATABASE_URL)做存在性断言
- 对数值型字段(如REDIS_PORT)尝试转为int并捕获异常
- 打印清晰提示,比如“缺少配置项 DATABASE_URL,请检查 .env 或 ENV=prod 配置”
本地开发友好 + 不提交敏感信息
开发机无需改代码就能切环境,同时确保.env和config_prod.py不进Git。
- 在.gitignore中加入*.env、config_*.py(除config_dev.py可留作模板)
- 提供.env.example,列出所有需设置的变量名和说明
- 启动脚本(如run.sh)默认加载ENV=dev,生产部署用ENV=prod显式指定










