web-dev-qa-db-fra.com

Installer lapack pour numpy

Exécuter Ubuntu 11.10 + python2.7 ... construit numpy à partir de la source et l'a installé, mais quand je vais l'installer, je reçois

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

quand il essaie d'importer lapack_lite depuis numpy.linalg. J'ai essayé de reconstruire lapack à partir de zéro, mais il semble

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

et le fichier .so. D'où vient le .so.3gf et comment le corriger?

30
Richard Żak

J'avais le même problème et la suppression du paquet libopenblas-base a fait l'affaire:

Sudo apt-get remove libopenblas-base

Comme déjà expliqué par d'autres, plusieurs packages fournissent des versions incompatibles de liblapack.so.3gf.

61
soramimo

Selon certains rapports de bugs que je vois, vous pouvez avoir plus d'un fournisseur de BLAS/ATLAS/LAPACK installé, comme ATLAS et OpenBLAS/GotoBLAS, qui sont en conflit les uns avec les autres. Jetez un oeil à ce sujet:

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

et vérifiez que tous correspondent au même package (par exemple, ils pointent tous vers /usr/lib/atlas-base/)

9
Ricardo Cárdenes

Ce problème survient lorsque libopenblas-base et libatlas3-base est installé, mais que liblapack n'est pas installé. Cette combinaison de packages installe des versions conflictuelles de libblas.so (d'OpenBLAS) et liblapack.so (d'ATLAS).

Solution 1 (ma préférée): Vous pouvez garder OpenBLAS et ATLAS sur votre machine si vous installez également liblapack.

Sudo apt-get install liblapack3

Solution 2: désinstallez ATLAS (cela installera en fait liblapack pour vous automatiquement en raison de quelques manigances du paquet deb)

Sudo apt-get uninstall libatlas3-base

Solution 3: désinstaller OpenBLAS

Sudo apt-get uninstall libopenblas-base


Mauvaise 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 "<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

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
Luke Yeager

Essayez de vérifier le LD_LIBRARY_PATH. Vous pourriez pointer vers une autre version de cette bibliothèque qui ne prend pas en charge le symbole dont l'appel numpy a besoin. J'ai eu la même situation sur mon Mac.

Mais attention, le problème peut ne pas être visible directement, car une bibliothèque peut être liée à la suivante à l'aide de LD_LIBRARY_PATH.

Vous pouvez vérifier si vous voyez une différence dans la commande suivante avec et sans l'ensemble LD_LIBRARY_PATH (à supprimer temporairement pour le shell actif: unset LD_LIBRARY_PATH):

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

Dans mon cas, les bibliothèques fournies par le système logiciel ISIS se sont heurtées aux bibliothèques intégrées dont numpy a besoin.

1
K.-Michael Aye