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

Twilio电话树在PythonAnywhere部署失败:KeyError: TWILIO_ACCOUNT_SID

解决PythonAnywhere部署Twilio电话树的KeyError问题

问题核心

本地基于Flask+Twilio搭建的电话树系统运行正常,但部署到PythonAnywhere后出现KeyError: 'TWILIO_ACCOUNT_SID',本质是Twilio相关环境变量未被正确加载。

分步解决方案

1. 验证.env文件的正确性

  • 确认.env文件存放在/home/sapperpe/tree/目录下,内容必须是无引号的键值对格式:
    TWILIO_ACCOUNT_SID=你的Twilio账号SID
    TWILIO_AUTH_TOKEN=你的Twilio认证令牌
    TWILIO_NUMBER=你的Twilio电话号码
    
  • 通过PythonAnywhere的文件管理器检查文件是否存在,内容是否完整,无多余空格或特殊符号。

2. 修复WSGI文件的dotenv加载逻辑

当前WSGI中os.path.expanduser(path)属于冗余操作,且未验证.env文件是否存在,修改后的代码如下:

import sys
import os
from dotenv import load_dotenv

path = '/home/sapperpe/tree'
if path not in sys.path:
    sys.path.append(path)

# 直接用绝对路径加载.env,添加存在性检查避免静默失败
env_path = os.path.join(path, '.env')
if os.path.exists(env_path):
    load_dotenv(env_path)
else:
    raise FileNotFoundError(f"未找到.env文件:{env_path}")

from tree import app as application

3. 优化代码中环境变量的获取方式

直接使用os.environ[key]会抛出模糊的KeyError,改为os.getenv()并添加校验逻辑:

# tree.py 开头部分修改
import os
from twilio.rest import Client

# 获取环境变量
account_sid = os.getenv('TWILIO_ACCOUNT_SID')
auth_token = os.getenv('TWILIO_AUTH_TOKEN')
twilio_number = os.getenv('TWILIO_NUMBER')

# 校验必要变量是否存在
if not all([account_sid, auth_token, twilio_number]):
    raise ValueError("缺少Twilio必要环境变量,请检查.env文件或PythonAnywhere环境配置")

4. Bash运行时的环境变量加载

如果在PythonAnywhere的bash中直接运行python tree.py,WSGI中的dotenv逻辑不会生效,需要手动加载.env:

# 进入项目目录后执行
source .env
python tree.py

5. 更可靠的替代方案:使用PythonAnywhere内置环境变量

放弃dotenv,直接在PythonAnywhere控制面板配置环境变量:

  • 进入Web应用页面,找到环境变量选项
  • 添加TWILIO_ACCOUNT_SID、TWILIO_AUTH_TOKEN、TWILIO_NUMBER三个变量及对应值
  • 保存后重启Web应用,此时代码中os.environ[key]可正常获取变量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 23:15:38