scipy/sklearn中的ImportError:`/usr/lib/liblapack.so.3gf: 未定义符号:ATL_chemv`
我的代码在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
这是我对发生情况的猜测:
你在使用Ubuntu 12.04时安装的
scikit-learn
版本是基于一个较旧的LAPACK版本构建的,这个版本由liblapack.so.3gf
提供。当你(大概)把Ubuntu从12.04升级到现在使用的版本时,LAPACK也升级到了一个新版本。在Ubuntu 13.04及以上的版本中,
python-numpy
包所依赖的LAPACK是由liblapack3
、liblapack.so.3
或libatlas3-base
提供的,而不是liblapack.so.3gf
。现在
scikit-learn
在运行时尝试链接到新版本,但由于旧版本和新版本的LAPACK不兼容,所以链接失败了。
我建议你先尝试用pip卸载然后重新安装scikit-learn
。希望这样能让scikit-learn
重新构建为使用新的LAPACK库,这样之后一切就应该正常了。
如果这样不行,我建议你卸载当前安装的任何LAPACK库。这可能会迫使你也卸载numpy
和scipy
。然后你可以安装liblapack3
,以及libopenblas-base
和libopenblas-dev
(这两个提供了比标准BLAS库更快的替代方案),接着再重新安装numpy
、scipy
和scikit-learn
。
4
可以试试这个
sudo update-alternatives --set liblapack.so.3gf /usr/lib/lapack/liblapack.so.3gf