Установка Lapack для NumPy - PullRequest
28 голосов
/ 19 января 2012

Запуск Ubuntu 11.10 + python2.7 ... собрал numpy из исходного кода и установил его, но когда я иду установить его, я получаю

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

, когда он пытается импортировать lapack_lite из numpy.linalg,Я пытался восстановить lapack с нуля, но, похоже, он просто создает

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

и файл .so.Откуда .so.3gf и как мне это исправить?

Ответы [ 4 ]

60 голосов
/ 15 марта 2012

У меня возникла та же проблема, и удаление пакета libopenblas-base позволило:

sudo apt-get remove libopenblas-base

Как уже объяснили другие, несколько пакетов предоставляют несовместимые версии liblapack.so.3gf.

9 голосов
/ 20 января 2012

Согласно некоторым отчетам об ошибках, которые я вижу, у вас может быть установлено несколько провайдеров BLAS / ATLAS / LAPACK, таких как ATLAS и OpenBLAS / GotoBLAS, которые конфликтуют друг с другом.Посмотрите на это:

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

и убедитесь, что все они соответствуют одному и тому же пакету (например, все они указывают на /usr/lib/atlas-base/)

4 голосов
/ 23 января 2016

Эта проблема возникает, когда у вас установлены libopenblas-base и libatlas3-base , но не установлена ​​ liblapack3 . Эта комбинация пакетов устанавливает конфликтующие версии libblas.so (из OpenBLAS) и liblapack.so (из ATLAS).

Решение 1 (мое любимое): вы можете оставить на своей машине и OpenBLAS, и ATLAS, если также установите liblapack3 .

sudo apt-get install liblapack3

Решение 2: Удалите ATLAS (на самом деле это автоматически установит liblapack3 для вас из-за некоторых изменений в пакете deb)

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'
1 голос
/ 24 января 2012

Попробуйте проверить LD_LIBRARY_PATH. Вы можете указать там на другую версию этой библиотеки, которая не поддерживает символ, который нужен вызову numpy. У меня была такая же ситуация на моем Mac.

Но будьте осторожны, проблема может быть не видна напрямую, потому что одна библиотека может ссылаться на другую, используя LD_LIBRARY_PATH.

Вы можете проверить, видите ли вы разницу в следующей команде с набором LD_LIBRARY_PATH и без него (временно удалить для активной оболочки: unset LD_LIBRARY_PATH):

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

В моем случае библиотеки, предоставляемые программной системой ISIS, конфликтовали с встроенными библиотеками, которые требуются numpy.

...