如何修复'tensorflow.compat.v2.__internal__'无register_call_context_function属性错误
报错根本原因
你安装的官方原版keras-rl(即你导入的rl包)已停止维护,仅适配TensorFlow 2.4及更早版本。TensorFlow 2.5版本移除了内部API tensorflow.compat.v2.__internal__.register_call_context_function,因此触发属性错误。
修复方案(按优先级排序)
方案1:使用适配高版本TensorFlow的社区维护包
该方案无需改动现有代码,对环境影响最小:
- 卸载原版
keras-rl:
pip uninstall keras-rl -y
- 安装社区适配TF2.x的
keras-rl2:
pip install keras-rl2
- 直接重新执行原有导入代码
from rl.agent import DQNAgent即可正常运行。
方案2:降级TensorFlow到兼容版本
如果需要保留原版keras-rl,可以将TensorFlow降级到2.4版本(M1芯片适配良好):
- 卸载现有相关依赖:
pip uninstall tensorflow-macos tensorflow-metal keras keras-rl -y
- 安装匹配版本的依赖:
pip install tensorflow-macos==2.4.0 tensorflow-metal==0.1.2 keras==2.4.3 keras-rl==0.4.2
方案3:手动打补丁(临时修复)
如果不想改动现有依赖版本,可以直接修改keras-rl的源码跳过报错逻辑:
- 找到
keras-rl的安装路径,一般为你的Python环境路径/lib/python3.9/site-packages/rl/callbacks.py - 打开文件找到调用
register_call_context_function的行,直接注释掉该行即可,该API仅为旧版TF的内部上下文注册逻辑,不影响核心功能运行。
M1设备额外注意事项
安装依赖时优先使用conda-forge源,避免x86架构包的兼容问题,出现依赖冲突时可先创建全新的conda虚拟环境重新安装相关包。
内容的提问来源于stack exchange,提问作者Unks
相关产品推荐
相关产品推荐

