Mac已安装TensorFlow仍提示ModuleNotFoundError报错排查问询
问题描述
- 运行环境:Mac设备(从安装路径判断为Apple Silicon架构机型),计划使用Keras框架编写人工神经网络训练代码
- 报错场景:运行代码时在
import tensorflow as tf行触发异常 - 错误类型:
ModuleNotFoundError - 错误信息:
No module named 'tensorflow' - 已确认信息:执行
pip show tensorflow显示TensorFlow 0.12.0已安装,安装路径为/opt/homebrew/lib/python3.9/site-packages,列出的依赖包括numpy、protobuf、six、wheel - 测试代码如下:
import tensorflow as tf from tensorflow import keras from keras.models import Sequential from keras.layers import Dense, Activation model = Sequential() model.add(Dense(2, input_shape=(2,))) model.add(Activation('sigmoid')) model.add(Dense(1)) model.add(Activation('sigmoid')) model.compile(loss='mean_squared_error', optimizer='sgd', metrics=['accuracy'])
排查方向
1. 优先排查Python解释器与pip安装路径不匹配问题
这是该类报错的最高发原因。Mac设备通常同时存在多套Python环境:系统自带Python、Homebrew安装Python、虚拟环境(conda/venv)Python、pyenv管理的多版本Python,很容易出现pip把包装到了Python3.9的site-packages目录,但运行代码时调用的是其他版本Python解释器的情况。
排查操作:
- 在你运行代码的同一个终端/IDE运行环境中,执行
which python3(如果用python命令启动脚本就执行which python),确认输出的解释器路径是否对应Homebrew安装的Python3.9 - 执行
python3 -c "import sys; print(sys.path)",查看输出的包搜索路径列表中是否包含/opt/homebrew/lib/python3.9/site-packages,如果不存在该路径,即可确认是环境不匹配问题。
修复方式:使用当前运行代码的Python解释器直接调用pip安装包,不要直接用裸pip命令,格式为<对应Python解释器的绝对路径> -m pip install <包名>,避免装到其他环境。
2. 排查TensorFlow版本兼容性问题
你当前安装的TensorFlow 0.12.0是2017年发布的远古版本,存在两个致命兼容问题:
- 该版本发布时间远早于Apple Silicon系列芯片上市,没有ARM64架构的适配包,在M系列芯片的Mac上无法正常运行
- 该版本最高仅支持Python3.5,且发布时Keras尚未被整合进TensorFlow,代码中
from tensorflow import keras的写法在该版本下本身就不存在对应的模块,就算解决路径问题也会触发后续导入错误。
3. 排查代码导入逻辑问题
当使用TensorFlow 2.x内置的Keras模块时,不需要额外安装独立的Keras包,也不要直接从keras根路径导入模块,否则容易出现版本不匹配的导入错误。
可直接落地的修复步骤
- 第一步:清理旧的错误版本依赖,执行
pip uninstall -y tensorflow keras - 第二步:确认运行代码使用的Python解释器版本,推荐选择Python3.9~3.11,该版本区间在Apple Silicon Mac上对TensorFlow的兼容性最好
- 第三步:为当前使用的Python解释器安装适配版本的TensorFlow,执行
python3 -m pip install tensorflow,当前官方稳定版为2.x系列,已内置完整Keras模块,无需单独安装Keras - 第四步:安装完成后执行验证命令
python3 -c "import tensorflow as tf; print(tf.__version__)",如果正常输出版本号无报错,说明基础环境配置正确 - 第五步:调整代码中的Keras导入语句,将独立Keras的导入写法替换为TensorFlow内置路径,修改后代码如下:
import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, Activation model = Sequential() model.add(Dense(2, input_shape=(2,))) model.add(Activation('sigmoid')) model.add(Dense(1)) model.add(Activation('sigmoid')) model.compile(loss='mean_squared_error', optimizer='sgd', metrics=['accuracy'])
调整完成后重新运行代码即可正常启动。
内容的提问来源于stack exchange,提问作者jessie toms
相关产品推荐
相关产品推荐

