Mac M1设备Conda环境安装TensorFlow 2.5时NumPy导入报错兼容问题
操作复现步骤
- 安装适配arm64架构的miniforge3版本
- 执行命令创建并激活Conda环境:
conda create --name tf25 conda activate tf25 - 完成苹果官方TensorFlow插件配置流程
- 运行测试代码:
import numpy
报错信息
Traceback (most recent call last): File "/Users/antoniosquicciarini/miniforge3/envs/tf25/lib/python3.9/site-packages/numpy/core/init.py", line 22, in
from . import multiarray File "/Users/antoniosquicciarini/miniforge3/envs/tf25/lib/python3.9/site-packages/numpy/core/multiarray.py", line 12, in
from . import overrides File "/Users/antoniosquicciarini/miniforge3/envs/tf25/lib/python3.9/site-packages/numpy/core/overrides.py", line 7, in
from numpy.core._multiarray_umath import ( ImportError: dlopen(/Users/antoniosquicciarini/miniforge3/envs/tf25/lib/python3.9/site-packages/numpy/core/_multiarray_umath.cpython-39-darwin.so, 2): Library not loaded: @rpath/libcblas.3.dylib Referenced from: /Users/antoniosquicciarini/miniforge3/envs/tf25/lib/python3.9/site-packages/numpy/core/_multiarray_umath.cpython-39-darwin.so
Reason: image not found处理上述异常时触发二次报错:
Traceback (most recent call last): File "", line 1, in
File "/Users/antoniosquicciarini/miniforge3/envs/tf25/lib/python3.9/site-packages/numpy/init.py", line 140, in
from . import core File "/Users/antoniosquicciarini/miniforge3/envs/tf25/lib/python3.9/site-packages/numpy/core/init.py", line 48, in
raise ImportError(msg) ImportError:对应环境信息:
- Python版本:3.9,路径为/Users/antoniosquicciarini/miniforge3/envs/tf25/bin/python
- NumPy版本:1.19.5
根因:libcblas.3.dylib依赖库缺失,属于M1平台下TensorFlow 2.5与默认安装的NumPy版本兼容性问题。
已验证无效的解决方案
- 直接通过pip安装、重装NumPy
- 降级Python到3.8版本
可行修复步骤
激活tf25环境后依次执行以下操作:
- 彻底卸载当前环境内的所有NumPy版本:
pip uninstall -y numpy conda uninstall -y numpy
- 安装conda-forge源的OpenBLAS依赖,补全缺失的cblas库:
conda install -c conda-forge openblas
- 安装适配M1架构、兼容TensorFlow 2.5的指定NumPy版本:
conda install -c conda-forge numpy==1.21.2
- 运行
import numpy测试,无报错即为修复完成。如果仍存在兼容性问题,可重装对应版本的TensorFlow依赖:
conda install -c apple tensorflow-deps==2.5.0 pip install tensorflow-macos==2.5.0 pip install tensorflow-metal==0.1.2
内容的提问来源于stack exchange,提问作者Antonio

