运行Airflow时报ModuleNotFoundError: No module named 'keras.api'如何解决
问题根因
你遇到的报错并非来自你的业务代码,是Keras版本和环境内TensorFlow版本不兼容导致的:
- 你指定安装的Keras 2.3.1为较老的独立Keras版本,仅适配TensorFlow 1.15.x版本
- 堆栈最后一行可以看到报错触发点在Keras自身的
metrics.py文件内,调用tf.keras.metrics.MeanIoU时,环境内的TensorFlow实际为2.x版本,2.x版本内置的Keras模块路径使用keras.api结构,和旧版独立Keras 2.3.1的预期路径不匹配,因此抛出找不到keras.api的错误 - 你安装的apache-airflow 1.10.9的依赖链会自动拉取更高版本的TensorFlow,覆盖了Keras 2.3.1要求的版本范围,导致版本冲突
修复方案
- 方案1(推荐,兼容性最好):在Dockerfile的Keras安装语句前锁定TensorFlow版本,匹配Keras 2.3.1的要求:
RUN pip install "tensorflow==1.15.5" RUN pip install "Keras==2.3.1" RUN pip install "apache-airflow[celery,devel,postgres,redis,s3,ssh]==1.10.9" RUN pip install "keras-models==0.0.7" - 方案2(适配新版本):如果业务允许升级依赖,将Keras升级到适配TensorFlow 2.x的版本,同时对应安装匹配的TensorFlow版本,例如:
注意安装后需要测试RUN pip install "tensorflow==2.8.0" RUN pip install "Keras==2.8.0" RUN pip install "apache-airflow[celery,devel,postgres,redis,s3,ssh]==1.10.9" RUN pip install "keras-models==0.0.7"keras-models 0.0.7是否能正常适配高版本Keras - 方案3(临时热修复):不需要修改依赖,在服务导入任何Keras相关模块的入口最开头加入路径映射补丁:
import sys from tensorflow import keras sys.modules['keras.api'] = keras
内容的提问来源于stack exchange,提问作者angelokh
相关产品推荐
相关产品推荐

