scipy/sklearn中的ImportError:`/usr/lib/liblapack.so.3gf: 未定义符号:ATL_chemv`

-1 投票
3 回答
3684 浏览
提问于 2025-04-17 21:33

我的代码在Ubuntu 12.04上运行得很好,但现在出现了错误:

  from sklearn.metrics import accuracy_score   File "/usr/local/lib/python2.7/dist-packages/sklearn/metrics/__init__.py", line 6, in 
    from .metrics import (accuracy_score,   File "/usr/local/lib/python2.7/dist-packages/sklearn/metrics/metrics.py", line 25, in 
    from scipy.spatial.distance import hamming as sp_hamming   File "/usr/local/lib/python2.7/dist-packages/scipy/spatial/__init__.py", line 91, in 
    from .qhull import *  ImportError: /usr/lib/liblapack.so.3gf: undefined symbol: ATL_chemv

我不明白这个错误是什么意思,我该怎么办。

3 个回答

0

我只需要安装 liblapack3 就解决了这个问题:

apt-get install liblapack3
3

这是我对发生情况的猜测:

  1. 你在使用Ubuntu 12.04时安装的scikit-learn版本是基于一个较旧的LAPACK版本构建的,这个版本由liblapack.so.3gf提供。

  2. 当你(大概)把Ubuntu从12.04升级到现在使用的版本时,LAPACK也升级到了一个新版本。在Ubuntu 13.04及以上的版本中,python-numpy包所依赖的LAPACK是由liblapack3liblapack.so.3libatlas3-base提供的,而不是liblapack.so.3gf

  3. 现在scikit-learn在运行时尝试链接到新版本,但由于旧版本和新版本的LAPACK不兼容,所以链接失败了。

我建议你先尝试用pip卸载然后重新安装scikit-learn。希望这样能让scikit-learn重新构建为使用新的LAPACK库,这样之后一切就应该正常了。

如果这样不行,我建议你卸载当前安装的任何LAPACK库。这可能会迫使你也卸载numpyscipy。然后你可以安装liblapack3,以及libopenblas-baselibopenblas-dev(这两个提供了比标准BLAS库更快的替代方案),接着再重新安装numpyscipyscikit-learn

4

可以试试这个

sudo update-alternatives --set liblapack.so.3gf /usr/lib/lapack/liblapack.so.3gf

撰写回答