Mac的M2芯片运行lightgbm报错,其他python包可用,x86_x64架构运行
问题
OSError: dlopen(/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/lightgbm/lib_lightgbm.so, 0x0006): Library not loaded: /usr/local/opt/libomp/lib/libomp.dylib
Referenced from: <ABE11853-3862-3862-A992-E89D6F4B220D> /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/lightgbm/lib_lightgbm.so
Reason: tried: '/usr/local/opt/libomp/lib/libomp.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/usr/local/opt/libomp/lib/libomp.dylib' (no such file), '/usr/local/opt/libomp/lib/libomp.dylib' (no such file), '/usr/local/lib/libomp.dylib' (no such file), '/usr/lib/libomp.dylib' (no such file, not in dyld cache)
解决办法
看起来你遇到的问题是由于架构不兼容导致的。你的系统是基于ARM架构的(例如Apple Silicon的M1或M2芯片),而你需要的是x86_64架构的库。以下是解决这个问题的步骤:
-
安装Rosetta 2:
如果你还没有安装Rosetta 2,可以通过以下命令安装:/usr/sbin/softwareupdate --install-rosetta --agree-to-license
-
使用Rosetta 2运行终端:
你需要在Rosetta 2环境下运行终端。你可以通过以下步骤来实现:- 打开Finder,导航到
应用程序
>实用工具
。 - 右键点击
终端
应用程序,选择显示简介
。 - 勾选
使用Rosetta打开
选项。
- 打开Finder,导航到
-
重新安装Homebrew:
在Rosetta 2环境下重新安装Homebrew,以确保安装的包是x86_64架构的。首先,卸载现有的Homebrew:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)"
然后重新安装Homebrew:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
-
安装x86_64架构的libomp:
在Rosetta 2环境下,使用Homebrew安装x86_64架构的libomp
:arch -x86_64 brew install libomp
-
设置环境变量:
确保环境变量正确设置。将以下行添加到你的shell配置文件(如~/.bash_profile
或~/.zshrc
)中:export LIBRARY_PATH=$(brew --prefix libomp)/lib:$LIBRARY_PATH export LD_LIBRARY_PATH=$(brew --prefix libomp)/lib:$LD_LIBRARY_PATH export DYLD_LIBRARY_PATH=$(brew --prefix libomp)/lib:$DYLD_LIBRARY_PATH
然后重新加载配置文件:
source ~/.bash_profile # 或者 source ~/.zshrc
-
重新安装LightGBM:
重新安装LightGBM以确保它正确链接到新安装的libomp
库:pip uninstall lightgbm pip install lightgbm
按照这些步骤操作后,再次运行你的Python脚本。错误应该会被解决。如果问题仍然存在,请提供更多的错误信息或输出结果,以便进一步诊断。