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

macOS下如何仅用Python os模块读取.env环境变量?代码返回None求解

仅用os模块读取.env文件key的问题排查与实现

问题原因

os模块本身不会自动加载.env文件,os.getenv()只能读取当前进程环境变量中已存在的值。你用dotenv能成功读取,是因为dotenv会自动解析.env文件并将键值对注入到os.environ(进程环境变量字典)中;而直接运行你的test.py时,key变量根本没被加入到环境变量里,所以返回None。

仅用os模块的实现方法

要只用os模块实现,需要手动读取并解析.env文件,将变量添加到环境变量中。示例代码:

import os

def load_env(env_path='.env'):
    # 检查.env文件是否存在
    if not os.path.isfile(env_path):
        print(f"Warning: {env_path} file not found")
        return
    # 读取并解析.env文件
    with open(env_path, 'r', encoding='utf-8') as f:
        for line in f:
            line = line.strip()
            # 跳过注释和空行
            if not line or line.startswith('#'):
                continue
            # 分割键值对(仅分割第一个等号,避免值里包含等号的情况)
            if '=' not in line:
                continue
            key, value = line.split('=', 1)
            # 去除键和值前后的空格
            key = key.strip()
            value = value.strip()
            # 将变量注入环境变量
            os.environ[key] = value

# 先加载.env文件
load_env()
# 现在可以正常获取变量
actual_key = os.getenv('key')
print(actual_key)  # 输出:123456

额外注意事项

  • 确保.env文件和你的test.py脚本在同一目录下,或者在load_env()中传入正确的文件路径(比如load_env('/Users/xxx/project/.env'))
  • 解析逻辑处理了常见场景:注释行(以#开头)、空行、键值对前后带空格的情况(匹配你.env里key = 123456的格式)
  • 如果你不想写代码加载,也可以在终端手动导出变量后再运行脚本:
# 终端执行,先设置环境变量
export key=123456
# 再运行脚本
python test.py

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 08:32:49