Mac下Python虚拟环境导入Scipy报错:__gfortran_stop_numeric_f08符号未找到
解决Mac虚拟环境中Scipy导入时的__gfortran_stop_numeric_f08符号缺失问题
问题原因
Mac系统中MATLAB自带的libgfortran.3.dylib版本过旧,缺少Scipy所需的__gfortran_stop_numeric_f08符号,且系统动态库搜索路径优先指向了MATLAB的库目录,导致Scipy加载时调用错误的库文件。
解决方案
方法1:临时调整动态库路径(单次生效)
- 激活虚拟环境后,先确认通过Homebrew安装的gcc库路径(以gcc 12为例,版本号可根据实际安装情况修改):
ls /usr/local/opt/gcc/lib/gcc/ - 将gcc的库路径添加到
DYLD_LIBRARY_PATH最前面:export DYLD_LIBRARY_PATH="/usr/local/opt/gcc/lib/gcc/12:$DYLD_LIBRARY_PATH" - 重新运行Python并尝试导入Scipy即可。
方法2:永久修改虚拟环境激活脚本(长期生效)
- 打开虚拟环境的激活脚本:
nano /Users/mshafer/Desktop/PLAYGROUND/CODE_TOEPLITZ/uavrt_venv/bin/activate - 在文件末尾添加以下代码,设置动态库路径优先级:
# 保存原始DYLD路径,避免影响其他程序 export ORIGINAL_DYLD_PATH=$DYLD_LIBRARY_PATH # 将gcc的gfortran库路径放到最前面 export DYLD_LIBRARY_PATH="/usr/local/opt/gcc/lib/gcc/12:$DYLD_LIBRARY_PATH" - 找到脚本中的
deactivate()函数,在函数内添加恢复原始路径的代码:if [ -n "$ORIGINAL_DYLD_PATH" ]; then export DYLD_LIBRARY_PATH=$ORIGINAL_DYLD_PATH unset ORIGINAL_DYLD_PATH fi - 保存退出后,重新激活虚拟环境即可生效。
方法3:从源码重新编译Scipy
如果上述方法无法解决,可尝试强制从源码编译适配当前系统库的Scipy:
- 卸载现有Scipy:
pip uninstall -y scipy - 确保已安装gcc(包含gfortran):
brew install gcc - 从源码安装Scipy:
pip install scipy --no-binary :all:
补充说明
Linux环境下无此问题,是因为Linux的动态库搜索机制与Mac不同,MATLAB的库不会被自动加入系统全局搜索路径,因此不会与Scipy依赖的库产生冲突。
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

