Python项目如何根据运行环境加载对应环境变量文件?
解决方案:根据运行环境加载对应环境变量文件
问题修正与核心逻辑
当前代码的问题在于:
load_dotenv(os.getenv('local.env'))写法错误,os.getenv('local.env')是读取名为local.env的系统环境变量,而非指定要加载的文件名。load_dotenv默认会尝试加载根目录的.env文件,即使指定了其他文件,所以必须明确控制加载逻辑,同时删除默认的.env文件。
修改后的代码实现
import os from dotenv import load_dotenv # 获取当前运行环境,未指定则默认用local current_env = os.getenv("ENVIRONMENT", "local") # 拼接对应环境的配置文件名 env_file_path = f"{current_env}.env" # 加载指定环境文件,override=True确保覆盖同名变量,且不加载默认.env load_dotenv(dotenv_path=env_file_path, override=True) class Client(BaseClient): def __init__(self): # 注意:这里是双下划线的__init__,原代码的单下划线写法无效 self.endpoint = os.environ.get('INTEGRATION_URL')
不同环境的启动方式
启动项目时,通过设置ENVIRONMENT环境变量来指定运行环境:
- 本地开发环境:
export ENVIRONMENT=local python client.py - 测试环境:
export ENVIRONMENT=staging python client.py - 生产环境:
export ENVIRONMENT=production python client.py
如果是在IDE中运行,直接在运行配置里添加环境变量ENVIRONMENT=对应环境名即可。
关键注意点
- 务必删除项目根目录下的
.env文件,彻底避免默认加载逻辑干扰。 override=True参数确保配置文件中的变量会覆盖系统中已有的同名环境变量,保证环境变量的唯一性。- 类的初始化方法必须是
__init__(双下划线),原代码的_init_无法触发初始化逻辑,会导致self.endpoint无法被赋值。
内容的提问来源于stack exchange,提问作者rai
相关产品推荐
相关产品推荐

