新Mac运行Python调用librosa报sndfile library not found错误求助
M1 Mac 运行librosa触发
sndfile library not found报错解决 核心报错
OSError: sndfile library not found
已尝试操作
- 通过
pip install、conda install -c conda-forge librosa安装librosa与SoundFile库 - 通过Homebrew安装libsndfile,不确定安装路径是否符合要求
- 配置以下环境变量后问题仍未解决:
export CPATH=/opt/homebrew/include export LIBRARY_PATH=/opt/homebrew/lib
环境信息
- 设备:MacBook Pro M1 Max
- 系统:MacOS Monterey
- Python:3.9
- librosa:0.9.1
- SoundFile:0.10.3
- IDE:最新版PyCharm社区版
根因定位
Python环境默认加载libsndfile动态库的路径为:/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/_soundfile_data/libsndfile.dylib
Homebrew安装的libsndfile实际存放路径为:/opt/homebrew/lib/libsndfile.dylib
路径不匹配,且配置的环境变量为编译阶段使用的路径变量,不是MacOS运行时加载动态库识别的变量,同时PyCharm不会自动继承shell中配置的环境变量,共同导致报错。
解决步骤
按顺序执行,执行到哪一步问题解决就可以停止:
- 优先使用conda-forge源强制重装适配arm64架构的全量依赖,自动处理路径映射,不需要手动改配置:
conda install -c conda-forge libsndfile librosa soundfile --force-reinstall - 如果使用系统Python+pip+Homebrew的安装组合,直接创建软链接把Homebrew安装的动态库映射到Python默认查找的路径:
mkdir -p /Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/_soundfile_data/ ln -sf /opt/homebrew/lib/libsndfile.dylib /Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/_soundfile_data/libsndfile.dylib - 软链配置后如果PyCharm运行仍报错,手动在PyCharm运行配置中添加动态库加载路径:
- 打开顶部菜单
Run > Edit Configurations - 选中当前运行的Python脚本配置,在
Environment variables栏新增两个变量:DYLD_LIBRARY_PATH = /opt/homebrew/libDYLD_FALLBACK_LIBRARY_PATH = /opt/homebrew/lib
注意:MacOS系统运行时加载动态库仅识别
DYLD_前缀的路径变量,之前配置的LIBRARY_PATH、CPATH仅在源码编译阶段生效,运行时不生效。 - 打开顶部菜单
- 不需要手动拉取git源码编译libsndfile,Homebrew提供的预编译版本已经适配M1系列arm64架构,手动源码编译如果未指定架构参数,会生成x86_64版本的动态库,反而触发架构不兼容报错。
内容的提问来源于stack exchange,提问作者jonasblome
相关产品推荐
相关产品推荐

