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?
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.
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/
)
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
$ 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
$ 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'
$ 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'
$ 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'
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.