引入不可pip安装的git子模块后导入包报ModuleNotFoundError如何解决
问题排查与解决方案
操作正确性确认
你的git初始化、添加子模块、给sys.path追加子模块路径的操作都完全正确,没有操作失误。
报错根因
你引入的keras-deep-graph-learning仓库最后更新时间较早,适配的是旧版本Keras(2.3及更早版本)。在Keras 2.4+以及被整合进TensorFlow的tf.keras版本中,keras.engine.topology模块已经被废弃,原有的Layer类迁移到了keras.engine.base_layer路径下,因此触发了模块找不到的报错。
可用解决方法
方案1:修改仓库源码(优先推荐,不影响现有环境)
- 打开报错指向的文件:
keras-deep-graph-learning/keras_dgl/layers/graph_cnn_layer.py - 将第4行的导入语句:
from keras.engine.topology import Layer
替换为以下任意一种写法即可:
# 写法1:适配新版原生Keras from keras.engine.base_layer import Layer # 写法2:适配tf.keras from tensorflow.keras.layers import Layer
- 检查同目录下其他层文件(如
multi_graph_cnn_layer.py、graph_attention_cnn_layer.py等),只要存在from keras.engine.topology import Layer的语句都做相同修改,即可解决该报错。
方案2:降级Keras版本
如果不想修改源码,可将环境的Keras版本降级到2.3.1,同时配套安装TensorFlow 2.0.x版本即可兼容该仓库的原有代码。该方案的缺点是可能会影响你其他依赖高版本TensorFlow/Keras的项目运行。
内容的提问来源于stack exchange,提问作者yihao ren
相关产品推荐
相关产品推荐

