You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何source .env后os.getenv无法读取环境变量?需export或python-dotenv?

为什么source .env后Python脚本仍无法读取环境变量?

核心原因:Shell本地变量 vs 环境变量的作用域差异

当你执行source .env时,.env里的TEST='test'只是被设置成当前Shell的本地变量,这类变量仅存在于当前Shell进程中,不会被传递给它启动的子进程(比如你运行的python3 main.py就是Shell的子进程)。

终端能输出$TEST是因为你是在当前Shell进程里直接访问这个本地变量,但Python脚本作为子进程,只能继承父进程(Shell)的环境变量,而非本地变量,所以os.getenv和os.environ都找不到这个变量。


为什么export TEST=test有效?

export命令的作用是将Shell本地变量升级为环境变量。一旦变量被export,Shell会把它加入到自己的环境变量列表中,后续启动的所有子进程(包括Python)都会继承这份环境变量列表,Python的os模块自然就能读取到。

如果想让source .env直接生效,你可以修改.env文件,给变量加上export前缀:

export TEST='test'

这样source .env后,变量会直接成为环境变量,Python脚本也能正常读取。


为什么python-dotenv模块有效?

python-dotenv不走Shell环境变量传递的流程,它会直接读取.env文件的内容,手动将这些键值对加载到Python进程自己的os.environ字典中。相当于在Python内部完成了环境变量的设置,完全不依赖Shell的环境变量传递机制,所以不管Shell有没有设置对应的环境变量,Python都能读到。

内容的提问来源于stack exchange,提问作者Vyacheslav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 21:48:19