如何使用python-dotenv实现多环境配置(命令行传参)
多环境配置实现方案及架构建议
核心结论
建议把环境加载逻辑抽成单独的配置文件,既可以让业务代码更简洁,也方便后续维护和复用。
具体实现步骤
1. 目录结构规划
先梳理项目目录,把各环境的配置文件集中存放:
project/ ├── config/ │ ├── .env.qa │ ├── .env.staging │ └── .env.prod ├── config.py # 单独的环境配置加载文件 └── Test.py # 业务脚本
2. 编写独立配置文件 config.py
这里用argparse处理命令行传入的环境参数,自动加载对应环境变量:
# config.py import os import argparse from dotenv import load_dotenv from pathlib import Path def load_config(): # 解析命令行的环境参数 parser = argparse.ArgumentParser() parser.add_argument('--env', required=True, choices=['qa', 'staging', 'prod'], help='指定运行环境: qa/staging/prod') args = parser.parse_args() # 构建对应环境的配置文件路径 dotenv_path = Path(f'config/.env.{args.env}') # 加载环境变量(override=True确保优先加载指定环境的配置) load_dotenv(dotenv_path=dotenv_path, override=True) # 封装需要的配置项,方便业务代码调用 return { 'HOST': os.getenv('HOST') # 可根据需求添加其他环境变量 }
3. 调整业务脚本 Test.py
直接调用配置文件的逻辑,不用关心环境加载细节:
# Test.py from config import load_config config = load_config() print(config['HOST'])
4. 各环境配置文件示例
.env.qa:
HOST="https://qa.example.com"
.env.staging:
HOST="https://staging.example.com"
.env.prod:
HOST="https://www.example.com"
5. 运行方式
在命令行传入环境参数即可启动:
python Test.py --env qa
为什么要单独抽配置文件?
- 代码解耦:业务脚本不用关心环境变量如何加载,只专注自身业务逻辑
- 复用性强:如果有多个脚本需要加载环境变量,直接引入
config.py即可,不用重复写加载逻辑 - 维护便捷:后续新增环境、调整配置路径等,只需要修改
config.py,不用改动所有业务脚本
内容的提问来源于stack exchange,提问作者user23976511
相关产品推荐
相关产品推荐

