【问题标题】:Installing lapack for numpy为 numpy 安装 lapack
【发布时间】:2012-01-18 21:50:16
【问题描述】:

运行 Ubuntu 11.10 + python2.7...从源代码构建 numpy 并安装它,但是当我去安装它时,我得到了

ImportError: /usr/lib/liblapack.so.3gf: undefined symbol: ATL_chemv

当它尝试从 numpy.linalg 导入 lapack_lite 时。我试图从头开始重建lapack,但它似乎只是让

/usr/local/lib/libblas.a
/usr/local/lib/liblapack.a
/usr/local/lib/libtmglib.a

和 .so 文件。 .so.3gf 来自哪里,我该如何解决?

【问题讨论】:

  • 你用过pip install numpy吗?另外,为什么 Ubuntu 的 python-numpy 包不适合你?

标签: python numpy installation lapack


【解决方案1】:

我遇到了同样的问题,删除包 libopenblas-base 就成功了:

sudo apt-get remove libopenblas-base

正如其他人已经解释的那样,有几个包提供了不兼容的 liblapack.so.3gf 版本。

【讨论】:

  • 是否有任何软件包也提供不兼容版本的 liblapack.so.3gf?我尝试删除 libopenblas-base,但 apt-get 找不到这个包。
【解决方案2】:

根据我看到的一些错误报告,您可能安装了多个 BLAS/ATLAS/LAPACK 提供商,例如 ATLAS 和 OpenBLAS/GotoBLAS,它们相互冲突。看看这个:

$ ls -l /etc/alternatives/*.so.3gf

并检查它们是否都对应于同一个包(例如,它们都指向/usr/lib/atlas-base/

【讨论】:

  • 我在以一个用户身份导入 numpy 时出现此错误,但以另一个用户身份导入时却没有。这怎么可能?
  • 可能是你们每个人都在导入不同版本的 NumPy(例如,系统范围的与本地编译的)?如果不是,则某人环境中的 LD_LIBRARY_PATH 可能会使 NumPy 加载不同的 LAPACK。
  • 我有这个是因为一个用户设置了 LD_LIBRARY_PATH,另一个没有。是的,我们有一个软件系统来提供这个库并要求使用它自己的版本。呸呸呸
  • 很高兴你能找到它:)
  • 如果有多个怎么办? /etc/alternatives/libblas.so.3gf -> /usr/lib/libblas/libblas.so.3 /etc/alternatives/liblapack.so.3gf -> /usr/lib/atlas-base/atlas/liblapack.so .3gf 如果我删除一个或另一个,apt-get 重新安装它
【解决方案3】:

当您安装了 libopenblas-baselibatlas3-base 但未安装 liblapack3 时会出现此问题。这种软件包组合会安装冲突版本的 libblas.so(来自 OpenBLAS)和 liblapack.so(来自 ATLAS)。

解决方案 1(我最喜欢的):如果您还安装了 liblapack3,则可以在您的计算机上同时保留 OpenBLAS 和 ATLAS。

sudo apt-get install liblapack3

解决方案 2:卸载 ATLAS(由于一些 deb 包的恶作剧,这实际上会自动为您安装 liblapack3

sudo apt-get uninstall libatlas3-base

解决方案 3:卸载 OpenBLAS

sudo apt-get uninstall libopenblas-base


错误的配置

$ dpkg -l | grep 'openblas\|atlas\|lapack'
ii  libatlas3-base                                        3.10.1-4                                            amd64        Automatically Tuned Linear Algebra Software, generic shared
ii  libopenblas-base                                      0.2.8-6ubuntu1                                      amd64        Optimized BLAS (linear algebra) library based on GotoBLAS2
$ update-alternatives --get-selections | grep 'blas\|lapack'
libblas.so.3                   auto     /usr/lib/openblas-base/libblas.so.3
liblapack.so.3                 auto     /usr/lib/atlas-base/atlas/liblapack.so.3
$ python -c 'import numpy'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/lib/python2.7/dist-packages/numpy/__init__.py", line 153, in <module>
    from . import add_newdocs
  File "/usr/lib/python2.7/dist-packages/numpy/add_newdocs.py", line 13, in <module>
    from numpy.lib import add_newdoc
  File "/usr/lib/python2.7/dist-packages/numpy/lib/__init__.py", line 18, in <module>
    from .polynomial import *
  File "/usr/lib/python2.7/dist-packages/numpy/lib/polynomial.py", line 19, in <module>
    from numpy.linalg import eigvals, lstsq, inv
  File "/usr/lib/python2.7/dist-packages/numpy/linalg/__init__.py", line 50, in <module>
    from .linalg import *
  File "/usr/lib/python2.7/dist-packages/numpy/linalg/linalg.py", line 29, in <module>
    from numpy.linalg import lapack_lite, _umath_linalg
ImportError: /usr/lib/liblapack.so.3: undefined symbol: ATL_chemv

解决方案 1

$ dpkg -l | grep 'openblas\|atlas\|lapack'
ii  libatlas3-base                                        3.10.1-4                                            amd64        Automatically Tuned Linear Algebra Software, generic shared
ii  liblapack3                                            3.5.0-2ubuntu1                                      amd64        Library of linear algebra routines 3 - shared version
ii  libopenblas-base                                      0.2.8-6ubuntu1                                      amd64        Optimized BLAS (linear algebra) library based on GotoBLAS2
$ update-alternatives --get-selections | grep 'blas\|lapack'
libblas.so.3                   auto     /usr/lib/openblas-base/libblas.so.3
liblapack.so.3                 auto     /usr/lib/lapack/liblapack.so.3
$ python -c 'import numpy'

解决方案 2

$ dpkg -l | grep 'openblas\|atlas\|lapack'
ii  liblapack3                                            3.5.0-2ubuntu1                                      amd64        Library of linear algebra routines 3 - shared version
ii  libopenblas-base                                      0.2.8-6ubuntu1                                      amd64        Optimized BLAS (linear algebra) library based on GotoBLAS2
$ update-alternatives --get-selections | grep 'blas\|lapack'
libblas.so.3                   auto     /usr/lib/openblas-base/libblas.so.3
liblapack.so.3                 auto     /usr/lib/lapack/liblapack.so.3
$ python -c 'import numpy'

解决方案 3

$ dpkg -l | grep 'openblas\|atlas\|lapack'
ii  libatlas3-base                                        3.10.1-4                                            amd64        Automatically Tuned Linear Algebra Software, generic shared
$ update-alternatives --get-selections | grep 'blas\|lapack'
libblas.so.3                   auto     /usr/lib/atlas-base/atlas/libblas.so.3
liblapack.so.3                 auto     /usr/lib/atlas-base/atlas/liblapack.so.3
$ python -c 'import numpy'

【讨论】:

    【解决方案4】:

    尝试检查 LD_LIBRARY_PATH。您可能会指向该库的另一个版本,该版本不支持 numpy 调用所需的符号。我在我的 Mac 上遇到了同样的情况。

    但请注意,问题可能无法直接看到,因为一个库可以使用 LD_LIBRARY_PATH 链接到下一个库。

    您可以检查是否在以下命令中看到设置和不设置 LD_LIBRARY_PATH 的差异(为活动 shell 临时删除:unset LD_LIBRARY_PATH):

    ldd /usr/lib/liblapack.so.3gf

    就我而言,ISIS 软件系统提供的库与 numpy 所需的板载库发生冲突。

    【讨论】:

      猜你喜欢
      • 2012-08-05
      • 2017-01-29
      • 1970-01-01
      • 2014-03-27
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 2019-01-08
      • 2016-09-14
      相关资源
      最近更新 更多