如何使用Python设置环境变量并使其对同环境其他脚本生效
问题原因
进程的环境变量是操作系统层面隔离的,你当前运行Python脚本的进程是父进程(通常是Shell终端)创建的子进程:
- 子进程默认会继承父进程的所有环境变量
- 子进程对自身环境变量的所有修改,只会作用于自身和它后续启动的孙子进程,完全不会回写到父进程的环境空间
你用Python的load_dotenv加载.env文件,本质是修改Python进程自身的os.environ字典,所以Python进程内可以正常读取,Python退出后修改就失效了,父Shell、其他独立进程自然拿不到对应的变量。
常见解决方案
方案1:直接用Shell加载.env(最简单通用)
如果没有特殊的解析逻辑,直接在当前Shell会话执行以下命令即可把.env里的变量导出到当前环境:
source common.env
执行后再运行其他脚本、执行echo $CONFIG_FOLDER_NAME都能正常拿到变量。
方案2:Python脚本配合Shell eval实现导出
如果必须用Python做.env的解析处理(比如有加密、动态拼接等自定义逻辑),可以修改Python脚本输出标准的Shell导出语句,再由Shell执行:
- 修改Python脚本(示例名:
export_env.py):
from dotenv import load_dotenv import os # 加载.env load_dotenv("common.env") # 仅输出.env内配置的变量(可选过滤,避免导出系统环境变量) with open("common.env", "r", encoding="utf-8") as f: for line in f: line = line.strip() if not line or line.startswith("#") or "=" not in line: continue key = line.split("=", 1)[0].strip() if key in os.environ: # 输出Shell export语句,值加双引号避免特殊字符问题 print(f'export {key}="{os.environ[key]}"')
- 在Shell中执行以下命令加载变量:
eval $(python export_env.py)
方案3:Python项目内多脚本共享.env配置
如果只是同一个项目里的多个Python脚本需要读取.env变量,最常用的方案是每个Python脚本启动时都调用一次load_dotenv("common.env"):
load_dotenv默认不会覆盖已经存在的系统环境变量,安全性高- 单次加载的性能开销可以忽略,不需要额外做跨进程同步
- 不受父Shell环境的影响,脚本单独运行也能正常读取配置
内容的提问来源于stack exchange,提问作者KZiovas
相关产品推荐
相关产品推荐

