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

是否需在每个Python模块中运行load_dotenv()?变量读取异常排查

环境变量加载后模块访问不一致问题解答

问题场景

定义了内容为env=loc的.env文件,项目目录结构如下:

├── __init__.py
├── cli.py
|── settings.py
├── commands
│   ├── __init__.py
│   └── output.py

各模块代码

  • settings.py:
from dotenv import load_dotenv
import os  # 注:原代码遗漏os模块导入,否则os.getenv会直接报错

load_dotenv()

if not os.getenv("env"):
    raise TypeError("'env' variable not found in .env file")
  • commands/output.py:
import os

def output():
  return getenv("env")  # 此处存在语法问题
  • cli.py:
import settings
from commands.output import output
import os

CURR_ENV = os.getenv("env") 
print(CURR_ENV)
print(output())

执行cli.py后输出:

loc 
None

疑问:为何output.py的输出不是loc?首次运行load_dotenv()时已加载环境变量。是否需要在每个需访问环境变量的模块中都运行load_dotenv()?

问题原因与解决办法

核心问题

output.py里的getenv("env")未指定所属模块——你已经导入了os模块,但调用方法时漏掉了os.前缀,导致Python认为你在调用一个未定义的本地函数,最终返回None,这和环境变量是否加载完全无关。

关于load_dotenv()的说明

load_dotenv()是全局生效的:一旦在任意模块执行该函数,整个Python进程的环境变量都会被更新,不需要在每个模块重复调用。你这里的settings.py已经执行了load_dotenv(),所有模块都能访问到加载后的环境变量,前提是代码调用正确。

修正方案

修改output.py的代码,补上os.前缀:

import os

def output():
  return os.getenv("env")

再次执行cli.py,输出就会变成:

loc
loc

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 20:05:17