sklearn 在新的 conda 环境中找不到 lapack

问题描述 投票:0回答:1

问题:

为什么 sklearn 无法检测到其 liblapack 依赖项以及如何解决此问题?

背景:

我安装了

torch-nightly
的以下 conda 环境 (
scikit-learn
)(请注意,
liblapack
依赖项也存在):

(torch-nightly) au@a2 ~ % conda list |grep "scikit-learn"
scikit-learn              1.1.1            py38hc377ac9_0  
(torch-nightly) au@a2 ~ % conda list |grep "liblapack"
liblapack                 3.9.0           15_osxarm64_openblas    conda-forge

问题:

尝试导入时出现以下错误

sklearn

(torch-nightly) au@a2 ~ % python -c "import sklearn"                                                              
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/Users/au/miniconda3/envs/torch-nightly/lib/python3.8/site-packages/sklearn/__init__.py", line 82, in <module>
    from .base import clone
  File "/Users/au/miniconda3/envs/torch-nightly/lib/python3.8/site-packages/sklearn/base.py", line 17, in <module>
    from .utils import _IS_32BIT
  File "/Users/au/miniconda3/envs/torch-nightly/lib/python3.8/site-packages/sklearn/utils/__init__.py", line 22, in <module>
    from scipy.sparse import issparse
  File "/Users/au/miniconda3/envs/torch-nightly/lib/python3.8/site-packages/scipy/sparse/__init__.py", line 283, in <module>
    from . import csgraph
  File "/Users/au/miniconda3/envs/torch-nightly/lib/python3.8/site-packages/scipy/sparse/csgraph/__init__.py", line 182, in <module>
    from ._laplacian import laplacian
  File "/Users/au/miniconda3/envs/torch-nightly/lib/python3.8/site-packages/scipy/sparse/csgraph/_laplacian.py", line 7, in <module>
    from scipy.sparse.linalg import LinearOperator
  File "/Users/au/miniconda3/envs/torch-nightly/lib/python3.8/site-packages/scipy/sparse/linalg/__init__.py", line 120, in <module>
    from ._isolve import *
  File "/Users/au/miniconda3/envs/torch-nightly/lib/python3.8/site-packages/scipy/sparse/linalg/_isolve/__init__.py", line 4, in <module>
    from .iterative import *
  File "/Users/au/miniconda3/envs/torch-nightly/lib/python3.8/site-packages/scipy/sparse/linalg/_isolve/iterative.py", line 9, in <module>
    from . import _iterative
ImportError: dlopen(/Users/au/miniconda3/envs/torch-nightly/lib/python3.8/site-packages/scipy/sparse/linalg/_isolve/_iterative.cpython-38-darwin.so, 0x0002): Library not loaded: '@rpath/liblapack.3.dylib'
  Referenced from: '/Users/au/miniconda3/envs/torch-nightly/lib/python3.8/site-packages/scipy/sparse/linalg/_isolve/_iterative.cpython-38-darwin.so'
  Reason: tried: '/Users/au/miniconda3/envs/torch-nightly/lib/python3.8/site-packages/scipy/sparse/linalg/_isolve/../../../../../../liblapack.3.dylib' (no such file), '/Users/au/miniconda3/envs/torch-nightly/lib/python3.8/site-packages/scipy/sparse/linalg/_isolve/../../../../../../liblapack.3.dylib' (no such file), '/Users/au/miniconda3/envs/torch-nightly/bin/../lib/liblapack.3.dylib' (no such file), '/Users/au/miniconda3/envs/torch-nightly/bin/../lib/liblapack.3.dylib' (no such file), '/usr/local/lib/liblapack.3.dylib' (no such file), '/usr/lib/liblapack.3.dylib' (no such file)

问题研究:

我确认“丢失”的库(

liblapack.3.dylib
)实际上存在于错误所示的位置:

(torch-nightly) au@a2 ~ % ls miniconda3/envs/torch-nightly/lib/liblapack.3.dylib
miniconda3/envs/torch-nightly/lib/liblapack.3.dylib
python numpy scikit-learn scipy lapack
1个回答
0
投票

注意:此答案仅适用于

macOS
用户,并涉及复制 dilyb,可能不兼容所有版本的 sklearn。 我强烈建议您首先尝试重新安装软件包。 如果您仍然失败并且已经达到愿意尝试任何事情的程度,以下步骤可能会解决问题。

我能够通过从自制软件安装中手动复制必要的

dylib
副本来解决此问题。 第一:我跑了
brew install lapack
[注意:对于我来说,这个安装的版本(3.11),运行命令后您可能会得到不同的版本] 然后我识别了
/opt/homebrew/Cellar/lapack/3.11/lib/*
中的所有相关文件:

liblapacke.dylib
libblas.3.11.0.dylib
libblas.3.dylib
libblas.dylib
liblapack.3.11.0.dylib
liblapack.3.dylib
liblapack.dylib
liblapacke.3.11.0.dylib
liblapacke.3.dylib

确定我的所有 python 包都会搜索的搜索路径。 我使用 miniconda 进行 python 环境管理,对我来说是:

~/miniconda3/envs/maxEnt/lib/

第1步: 删除此

lib
文件夹中名称匹配的所有现有文件。

第2步: 复制上面引用的文件。

第3步: 更新这些文件中的所有符号链接(别名)[

.dylib
指向3.11.0.dylib;
.3.dylib
指向
3.11.0.dylib
]。

© www.soinside.com 2019 - 2024. All rights reserved.