You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用python-dotenv时环境变量返回None的问题排查

为什么python-dotenv无法读取环境变量?

我来帮你排查下这个问题,通常遇到load_dotenv()os.getenv()返回None的情况,大概率是以下几个常见原因之一:

1. .env文件路径未正确定位

load_dotenv()默认会在当前工作目录下寻找.env文件,但如果你运行脚本的目录不是.envsettings.py所在的目录,就会找不到目标文件。比如你在父目录执行python3 subfolder/settings.py,此时当前工作目录是父目录,自然读不到子文件夹里的.env

解决方法:用脚本自身的路径来定位.env,确保无论在哪里运行都能找到它:

import os
from dotenv import load_dotenv
from pathlib import Path

# 获取当前脚本所在目录的.env路径
env_file_path = Path(__file__).parent / ".env"
load_dotenv(dotenv_path=env_file_path)

test_var = os.getenv("TEST_VAR")
print(test_var)

你也可以直接传入.env的绝对路径(比如/home/yourname/project/.env),不过用__file__的方式更灵活,适合项目迁移。

2. .env文件格式有误

检查你的.env文件是否符合格式要求:

  • 变量名和值之间不要加空格,比如不要写成TEST_VAR = jkh45k3j4h5k34j,应该是TEST_VAR=jkh45k3j4h5k34j(等号前后无空格)
  • 如果值包含空格或特殊字符,才需要用引号包裹,比如TEST_VAR="hello world",纯字符串不需要额外加引号
  • 确保文件没有多余的空行或无效注释(注释需要用#开头)

3. python-dotenv未正确安装

虽然你的脚本没有报错,但也有可能是库安装到了错误的Python环境里。可以在终端执行以下命令确认:

pip3 list | grep python-dotenv

如果没有输出,说明没安装,执行pip3 install python-dotenv重新安装即可。

4. 系统环境变量覆盖

极端情况下,如果系统中已经存在同名的TEST_VAR环境变量,且值为空或Noneos.getenv()会优先读取系统环境变量。你可以在脚本里先打印所有环境变量排查:

print(os.environ)

看看有没有TEST_VAR的条目,再判断是否是被覆盖的问题。

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

火山引擎 最新活动