python - M1 Mac 返回 OSError : Library not loaded

标签 python macos apple-m1 oserror

我尝试使用 from darts.models import ExponentialSmoothing 从 darts 包导入预测模型,并返回以下错误:

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)

我看到很多人在安装 LightGBM 时遇到同样的问题,并尝试了所有这些修复。我尝试过brew install libomp,我卸载并重新安装了Anaconda,我使用了不同的环境,我安装了gcc和cmake,但什么也没有工作了。我有一台配备 M1 芯片的 MacBook Pro,并使用 Spyder 和 Anaconda。有人能回答这个问题吗?

我的代码,直接取自darts包站点,其输出如下:

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)

最佳答案

sjp00,

你的帖子可能几乎是我逐字逐句写的。我经历了一个非常相似的过程。把我的头发拔出来后,这就是有效的。 TL;DR 是为了让 Darts 在苹果 M1 计算机上与 LightGBM 配合使用,需要使用 conda-forge。默认 conda 将不起作用(但可能在将来)。

阅读本期有助于澄清情况,https://github.com/microsoft/LightGBM/issues/4843

具体来说,StrikerRUS 的评论:

"If I understood correctly, default conda channels lack support of macOS-arm64 packages."(https://github.com/microsoft/LightGBM/issues/4843#issuecomment-1012313487)

One difference could be that I'm using Conda instead of miniconda?

Yeah! That is my main assumption! I believe that LightGBM is being compiled for arm64 architecture but conda (and Python) is x64-based and is run via Rosetta 2 translation. So architecture mismatch happens.

( https://github.com/microsoft/LightGBM/issues/4843#issuecomment-1061332231 )

在我的笔记本电脑上,即 MacBook Pro(16 英寸,2021 年),配备 Apple M1 Pro 芯片,安装了 macOS Monterey 版本 12.5.1 并进行了以下 conda 设置:

conda info

 active environment : lightgbm_test_env
active env location : /Users/bhudson/opt/anaconda3/envs/lightgbm_test_env
        shell level : 2
   user config file : /Users/bhudson/.condarc  populated config files : /Users/bhudson/.condarc
      conda version : 4.14.0
conda-build version : 3.21.9
     python version : 3.9.7.final.0
   virtual packages : __osx=10.16=0
                      __unix=0=0
                      __archspec=1=x86_64
   base environment : /Users/bhudson/opt/anaconda3  (writable)
  conda av data dir : /Users/bhudson/opt/anaconda3/etc/conda   conda av metadata url : None
       channel URLs : https://conda.anaconda.org/conda-forge/osx-64
                      https://conda.anaconda.org/conda-forge/noarch
                      https://repo.anaconda.com/pkgs/main/osx-64
                      https://repo.anaconda.com/pkgs/main/noarch
                      https://repo.anaconda.com/pkgs/r/osx-64
                      https://repo.anaconda.com/pkgs/r/noarch
      package cache : /Users/bhudson/opt/anaconda3/pkgs
                      /Users/bhudson/.conda/pkgs
   envs directories : /Users/bhudson/opt/anaconda3/envs
                      /Users/bhudson/.conda/envs
           platform : osx-64
         user-agent : conda/4.14.0 requests/2.26.0 CPython/3.9.7 Darwin/21.6.0 OSX/10.16
            UID:GID : 501:20
         netrc file : None
       offline mode : False

这最终对我有用。首先创建并激活一个干净的python 3.9环境

conda create -n lightgbm_test_env python=3.9
conda activate lightgbm_test_env

确保将 conda forge 添加为 channel (并且优先)

conda config --add channels conda-forge
conda config --set channel_priority strict

然后同时安装所有带 LightGBM 的 U8Darts。

conda install -c conda-forge -c pytorch u8darts-all lightgbm

“-c conda-forge”标志可能不是严格必要的,但我将其保留以提供额外的冗余。

关于python - M1 Mac 返回 OSError : Library not loaded,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73370909/

相关文章:

python - 在 ipython notebook 中读取输入值

swift - 如何防止标题栏在 Metal 中引起渲染问题?

python - M1 Mac 上的 Pip 安装 matplotlib 失败

cordova - 在 M1 Mac 上构建适用于 iOS 的 ionic cordova 应用程序

multithreading - 如何利用 Apple Silicon 上的高性能内核

python - 使用 .apply、.applymap、.groupby 转换 Pandas DataFrame 中的异常值

python - python的sphinx中var、cvar、ivar有什么区别?

python - 删除一个列表中存在于另一个列表中的元素

objective-c - CALayer 委托(delegate)方法未在层托管 View 上调用

c++ - 无法在 Mac 上发送超过 64 字节的 HID 功能报告