Installing lapack for numpy

匿名 (未验证) 提交于 2019-12-03 09:02:45

问题:

Running Ubuntu 11.10 + python2.7...built numpy from source and installed it, but when I go to install it, I get

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

when it tries to import lapack_lite from numpy.linalg. I tried to rebuild lapack from scratch, but it seems to just make

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

and the .so file. Where does the .so.3gf come from, and how do I fix it?

回答1:

I was having the same problem and removing the package libopenblas-base did the trick:

sudo apt-get remove libopenblas-base

As already explained by others, several packages provide incompatible versions of liblapack.so.3gf.



回答2:

According to some bugreports I see around, you may have more than one provider of BLAS/ATLAS/LAPACK installed, like ATLAS and OpenBLAS/GotoBLAS, that conflict with each other. Have a look on this:

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

and check that all them correspond to the same package (eg. they all point into /usr/lib/atlas-base/)



回答3:

This issue arises when you have libopenblas-base and libatlas3-base installed, but don't have liblapack3 installed. This combination of packages installs conflicting versions of libblas.so (from OpenBLAS) and liblapack.so (from ATLAS).

Solution 1 (my favorite): You can keep both OpenBLAS and ATLAS on your machine if you also install liblapack3.

sudo apt-get install liblapack3

Solution 2: Uninstall ATLAS (this will actually install liblapack3 for you automatically because of some deb package shenanigans)

sudo apt-get uninstall libatlas3-base

Solution 3: Uninstall OpenBLAS

sudo apt-get uninstall libopenblas-base


Bad configuration

$ 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 "", line 1, in    File "/usr/lib/python2.7/dist-packages/numpy/__init__.py", line 153, in      from . import add_newdocs   File "/usr/lib/python2.7/dist-packages/numpy/add_newdocs.py", line 13, in      from numpy.lib import add_newdoc   File "/usr/lib/python2.7/dist-packages/numpy/lib/__init__.py", line 18, in      from .polynomial import *   File "/usr/lib/python2.7/dist-packages/numpy/lib/polynomial.py", line 19, in      from numpy.linalg import eigvals, lstsq, inv   File "/usr/lib/python2.7/dist-packages/numpy/linalg/__init__.py", line 50, in      from .linalg import *   File "/usr/lib/python2.7/dist-packages/numpy/linalg/linalg.py", line 29, in      from numpy.linalg import lapack_lite, _umath_linalg ImportError: /usr/lib/liblapack.so.3: undefined symbol: ATL_chemv

Solution 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'

Solution 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'

Solution 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:

Try checking the LD_LIBRARY_PATH. You might point in there to another version of that library that does not support the symbol the numpy call needs. I had the same situation on my Mac.

But be careful, the problem might not be visible directly, because one library could link to the next using the LD_LIBRARY_PATH.

You can check if you see a difference in the following command with and without the LD_LIBRARY_PATH set (to remove temporarily for the active shell: unset LD_LIBRARY_PATH):

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

In my case, libraries provided by the ISIS software system clashed with the onboard libraries that numpy requires.



转载请标明出处:Installing lapack for numpy
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!