关于python:importError with scipy / sklearn:`/usr/lib/liblapack.so.3gf:undefined symbol:ATL_chemv`

ImportError with scipy/sklearn: `/usr/lib/liblapack.so.3gf: undefined symbol: ATL_chemv`

我的代码在Ubuntu 12.04中运行良好,但现在我有错误:

1
2
3
4
  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

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


可以试试这个

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


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

  • 您在运行Ubuntu 12.04时安装的scikit-learn版本是针对旧版本的LAPACK构建的,由liblapack.so.3gf提供。

  • 当你(大概)将Ubuntu从12.04升级到你现在使用的任何版本时,LAPACK也升级到了更新的版本。在Ubuntu> = 13.04的版本中,python-numpy包的LAPACK依赖性由liblapack3liblapack.so.3libatlas3-base提供,而不是liblapack.so.3gf

  • 现在scikit-learn尝试在运行时链接到较新版本,但由于旧版本和较新版本的LAPACK之间不兼容而失败。

  • 我建议你先尝试使用pip卸载并重新安装scikit-learn。希望scikit-learn将在新的LAPACK库中重建,从那时起一切都应该正常工作。

    如果这不起作用,我会尝试卸载任何当前安装的LAPACK库。这可能会迫使您也卸载numpyscipy。然后我会安装liblapack3,以及libopenblas-baselibopenblas-dev(它提供了比标准BLAS库更快的替代方案),然后重新安装numpyscipyscikit-learn


    只需安装liblapack3即可解决问题:

    1
    apt-get install liblapack3