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

Flask中Python读取环境变量报错KeyError问题求助

解决Flask读取环境变量时的KeyError问题

这问题我在开发Flask项目时碰到过好几次,咱们先搞清楚背后的原因,再一步步解决。

为什么会出现KeyError?

你用export KEY123=xxx123xxxABCxxx789设置的环境变量是终端会话级的——它只存在于当前终端进程,以及这个终端启动的子进程里。如果你的Flask脚本是从另一个终端、IDE(比如PyCharm/VSC,它们的进程独立于终端)、或者用sudo这类会重置环境的命令启动的,就会找不到这个变量,抛出KeyError。

你提到同一终端直接执行print(os.environ['KEY123'])能正常输出,那大概率是你运行Flask脚本的方式有问题:比如用了sudo切换用户,或者脚本的进程没有继承当前终端的环境变量。

安全又实用的解决方案

根据你“避免密钥提交到代码仓库”的需求,推荐下面几种方案:

1. 使用.env文件(推荐,适合开发环境)

这是Python项目存储敏感信息的标准做法,灵活又安全:

  • 先安装python-dotenv库:
    pip install python-dotenv
    
  • 在项目根目录创建.env文件,写入你的密钥:
    KEY123=xxx123xxxABCxxx789
    
  • 在Flask入口脚本(比如app.py)开头加载这个文件:
    from dotenv import load_dotenv
    import os
    from flask import Flask
    
    # 加载.env文件中的环境变量
    load_dotenv()
    
    app = Flask(__name__)
    # 用get()方法更安全,变量不存在时返回None,不会直接抛错
    app.config['KEY'] = os.environ.get('KEY123')
    
  • 一定要把.env加入.gitignore,防止不小心提交到仓库:
    在.gitignore里加一行:
    .env
    

2. 永久设置环境变量(适合服务器部署)

如果是生产服务器,不想用.env,可以把环境变量加到用户的shell配置文件里,让它永久生效:

  • 如果你用bash:编辑~/.bashrc或~/.bash_profile,添加一行:
    export KEY123=xxx123xxxABCxxx789
    
  • 如果是zsh:编辑~/.zshrc
  • 执行source ~/.bashrc(对应你的配置文件)让更改立即生效,之后新开的终端也能读取到这个变量。

3. 运行脚本时临时传递环境变量(临时测试用)

如果只是临时测试,不想修改配置文件或用.env,可以在运行脚本的命令前直接指定环境变量:

KEY123=xxx123xxxABCxxx789 python app.py

这种方式下,环境变量只在当前脚本进程中有效,不会污染全局环境。

额外提醒

  • 永远不要把密钥硬编码到代码里,也不要提交到版本控制仓库,这是安全开发的基本准则。
  • 用os.environ.get('KEY123')代替直接索引os.environ['KEY123'],这样如果变量不存在,只会返回None,而不是直接抛出KeyError,你还可以给get()加默认值,比如os.environ.get('KEY123', 'default_value')。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:34:30