M1芯片Mac导入darts模型遇OSError:libomp.dylib库未加载
报错核心信息
OSError: dlopen(/Users/sp/opt/anaconda3/envs/august/lib/python3.9/site-packages/lightgbm/lib_lightgbm.so, 0x0006): Library not loaded: /usr/local/opt/libomp/lib/libomp.dylib
Referenced from: /Users/sp/opt/anaconda3/envs/august/lib/python3.9/site-packages/lightgbm/lib_lightgbm.so
Reason: tried: '/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)
测试代码
import pandas as pd import darts from darts import TimeSeries # Read a pandas DataFrame df = pd.read_csv('/Users/sp/Documents/Skripsie/airline-passenger-traffic.csv') # Create a TimeSeries, specifying the time and value columns series = TimeSeries.from_dataframe(df, '1949-01', '112') # Set aside the last 36 months as a validation series train, val = series[:-36], series[-36:] from darts.models import ExponentialSmoothing
完整报错栈
Traceback (most recent call last): File "/var/folders/51/7qn6p5813zd3dw8p2c_t3btr0000gn/T/ipykernel_68567/3838417146.py", line 1, in <module> from darts.models import ExponentialSmoothing File "/Users/sp/opt/anaconda3/envs/august/lib/python3.9/site-packages/darts/models/__init__.py", line 46, in <module> from darts.models.forecasting.gradient_boosted_model import LightGBMModel File "/Users/sp/opt/anaconda3/envs/august/lib/python3.9/site-packages/darts/models/forecasting/gradient_boosted_model.py", line 13, in <module> import lightgbm as lgb File "/Users/sp/opt/anaconda3/envs/august/lib/python3.9/site-packages/lightgbm/__init__.py", line 8, in <module> from .basic import Booster, Dataset, Sequence, register_logger File "/Users/sp/opt/anaconda3/envs/august/lib/python3.9/site-packages/lightgbm/basic.py", line 110, in <module> _LIB = _load_lib() File "/Users/sp/opt/anaconda3/envs/august/lib/python3.9/site-packages/lightgbm/basic.py", line 101, in _load_lib lib = ctypes.cdll.LoadLibrary(lib_path[0]) File "/Users/sp/opt/anaconda3/envs/august/lib/python3.9/ctypes/__init__.py", line 460, in LoadLibrary return self._dlltype(name) File "/Users/sp/opt/anaconda3/envs/august/lib/python3.9/ctypes/__init__.py", line 382, in __init__ self._handle = _dlopen(self._name, mode) OSError: dlopen(/Users/sp/opt/anaconda3/envs/august/lib/python3.9/site-packages/lightgbm/lib_lightgbm.so, 0x0006): Library not loaded: /usr/local/opt/libomp/lib/libomp.dylib Referenced from: /Users/sp/opt/anaconda3/envs/august/lib/python3.9/site-packages/lightgbm/lib_lightgbm.so Reason: tried: '/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)
M1芯片Mac的brew默认安装路径是/opt/homebrew,而Anaconda环境的LightGBM默认查找/usr/local下的libomp,导致路径不匹配,以下是针对性修复方法:
1. 优先使用conda安装libomp
直接在当前Anaconda环境中安装conda维护的libomp,避免跨环境路径问题:
conda activate august conda install -c conda-forge libomp
2. 创建软链接映射brew安装的libomp路径
如果已经通过brew安装libomp,可将其路径映射到LightGBM查找的路径:
# 确保libomp已安装 brew install libomp # 创建目标目录(若不存在) sudo mkdir -p /usr/local/opt/libomp/lib # 建立软链接 sudo ln -s /opt/homebrew/opt/libomp/lib/libomp.dylib /usr/local/opt/libomp/lib/libomp.dylib
3. 设置环境变量指定libomp位置
在Spyder中添加环境变量,让系统找到正确的libomp:
- 打开Spyder,进入
Tools > Preferences > Python interpreter > Environment variables - 添加变量:
DYLD_LIBRARY_PATH,值为/opt/homebrew/opt/libomp/lib:$DYLD_LIBRARY_PATH - 重启Spyder生效
也可在终端激活环境后临时设置:
conda activate august export DYLD_LIBRARY_PATH=/opt/homebrew/opt/libomp/lib:$DYLD_LIBRARY_PATH
4. 手动编译适配M1的LightGBM(极端情况)
若上述方法均无效,手动编译源码安装:
conda activate august # 安装编译依赖 conda install -c conda-forge cmake gcc # 克隆仓库并编译 git clone --recursive https://github.com/microsoft/LightGBM cd LightGBM/python-package python setup.py install --install-lib=$CONDA_PREFIX/lib/python3.9/site-packages
内容的提问来源于stack exchange,提问作者sjp00

