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

PythonAnywhere重复运行Keras/TensorFlow脚本报TypeError如何解决

报错根因

这个TypeError: A Message class can only inherit from Message是protobuf库版本与TensorFlow/Keras不兼容导致的。
出现首次运行正常、第二次运行必报错、重启控制台才恢复的现象,和PythonAnywhere的环境特性直接相关:平台全局预装了4.x版本的protobuf,而Python3.7/3.8软件源提供的TensorFlow为2.6及更早的旧版本,这些旧版TensorFlow是基于3.x版本protobuf生成的proto类。首次导入时模块加载顺序刚好绕过了校验逻辑,第二次运行时因为Python模块缓存机制,两个版本的protobuf类定义冲突,就会触发继承校验错误。本地Python3.9环境运行正常,是因为本地安装的TensorFlow版本更高,已经适配4.x版protobuf,和PythonAnywhere的环境情况不具备可比性。

可行修复方案

按顺序操作即可:

  • 安装兼容版本的protobuf
    针对你使用的Python3.8环境,强制安装3.x系列的稳定兼容版,执行命令:
    pip3.8 install --user protobuf==3.20.3
    
    安装完必须完全关闭当前控制台,新开一个会话再测试,旧控制台里已经缓存的错误模块不会自动刷新。
  • 若上述操作后仍偶发报错,在脚本最顶部添加环境变量声明
    把以下代码放在脚本的最开头,所有import语句之前,强制使用纯Python实现的protobuf解析逻辑,绕过C扩展的版本冲突:
    import os
    os.environ["PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION"] = "python"
    
    # 后续再写import keras、import tensorflow等导入逻辑
    
  • 避免在同一个交互式Shell会话里重复加载TensorFlow相关脚本
    如果你习惯在Python交互环境中用exec()方式反复运行脚本,会触发重复加载的校验bug。日常运行脚本直接在Bash控制台用python3.8 你的脚本文件名.py执行即可,不要在长开的Python交互进程里重复导入TensorFlow。
验证方法

新开控制台后连续执行两次以下命令,若都能正常输出导入成功提示,即为修复完成:

python3.8 -c "import keras; print('keras导入成功')"

注意:不要自行在PythonAnywhere上升级TensorFlow版本,平台提供的预编译包是匹配系统底层依赖的,自行升级会触发更多底层依赖错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 11:15:54