Нужен ли Python SciPy BLAS?


176
numpy.distutils.system_info.BlasNotFoundError: 
    Blas (http://www.netlib.org/blas/) libraries not found.
    Directories to search for the libraries can be specified in the
    numpy/distutils/site.cfg file (section [blas]) or by setting
    the BLAS environment variable.

Какой смол мне нужно скачать с этого сайта?

Я пробовал Фортранс, но я получаю эту ошибку (очевидно, после установки переменной среды).


Таким образом, вопрос в том, какую версию вашей системы следует загрузить с какого-либо сайта, но в этом вопросе не указаны ни сведения о системе, ни сайт? Неудивительно, что ответов не последовало.
— Майкл Дж. Барбер

Ответы:


143

SciPy веб - страницы используется для обеспечения сборки и инструкции по установке, но инструкции там теперь полагаются на ОС бинарных дистрибутивов. Чтобы собрать SciPy (и NumPy) в операционных системах без предварительно скомпилированных пакетов необходимых библиотек, вы должны собрать, а затем статически связать с библиотеками Fortran BLAS и LAPACK :

mkdir -p ~/src/
cd ~/src/
wget http://www.netlib.org/blas/blas.tgz
tar xzf blas.tgz
cd BLAS-*

## NOTE: The selected Fortran compiler must be consistent for BLAS, LAPACK, NumPy, and SciPy.
## For GNU compiler on 32-bit systems:
#g77 -O2 -fno-second-underscore -c *.f                     # with g77
#gfortran -O2 -std=legacy -fno-second-underscore -c *.f    # with gfortran
## OR for GNU compiler on 64-bit systems:
#g77 -O3 -m64 -fno-second-underscore -fPIC -c *.f                     # with g77
gfortran -O3 -std=legacy -m64 -fno-second-underscore -fPIC -c *.f    # with gfortran
## OR for Intel compiler:
#ifort -FI -w90 -w95 -cm -O3 -unroll -c *.f

# Continue below irrespective of compiler:
ar r libfblas.a *.o
ranlib libfblas.a
rm -rf *.o
export BLAS=~/src/BLAS-*/libfblas.a

Выполните только одну из пяти команд g77 / gfortran / ifort. Я закомментировал все, кроме gfortran, который я использую. Для последующей установки LAPACK требуется компилятор Fortran 90 , и, поскольку обе установки должны использовать один и тот же компилятор Fortran, g77 не следует использовать для BLAS.

Затем вам нужно установить LAPACK. Инструкции на веб-странице SciPy помогли мне и здесь, но мне пришлось изменить их в соответствии с моей средой:

mkdir -p ~/src
cd ~/src/
wget http://www.netlib.org/lapack/lapack.tgz
tar xzf lapack.tgz
cd lapack-*/
cp INSTALL/make.inc.gfortran make.inc          # On Linux with lapack-3.2.1 or newer
make lapacklib
make clean
export LAPACK=~/src/lapack-*/liblapack.a

Обновление от 3 сентября 2015 года: проверено несколько комментариев сегодня (спасибо всем): Перед запуском make lapacklibотредактируйте make.incфайл и добавьте -fPICопцию OPTSи NOOPTнастройки. Если вы используете 64-битную архитектуру или хотите скомпилировать ее, также добавьте -m64. Важно, чтобы BLAS и LAPACK были скомпилированы с одинаковыми значениями этих параметров. Если вы забудете, -fPICSciPy выдаст ошибку об отсутствующих символах и порекомендует этот переключатель. Конкретный раздел make.incвыглядит так в моей настройке:

FORTRAN  = gfortran 
OPTS     = -O2 -frecursive -fPIC -m64
DRVOPTS  = $(OPTS)
NOOPT    = -O0 -frecursive -fPIC -m64
LOADER   = gfortran

На старых машинах (например, RedHat 5) gfortran может быть установлен в более старой версии (например, 4.1.2) и не понимает опцию -frecursive. Просто удалите его из make.incфайла в таких случаях.

Цель теста Lapack теста Makefile не удалась в моей установке, потому что он не может найти библиотеки blas. Если вы внимательны, вы можете временно переместить библиотеку blas в указанное место, чтобы протестировать ноутбук. Я ленивый человек, поэтому я доверяю разработчикам, чтобы он работал и проверял только в SciPy.


5
В blas.tgz нет libfblas.
— Джоедборг

32
Работал для меня, но мне пришлось редактировать make.incфайл, установив OPTS = -O2 -fPICи NOOPT = -O0 -fPIC.
— gui11aume

8
@jdborg, по-видимому, сейчас называется просто liblapack.a
— una_dinosauria

7
Мне пришлось добавить параметры -m64 в настройки OPTS и NOOPT в файле make.inc. Конечно, только вы на 64-битной машине.
— mjspier

21
+1 Большое спасибо за это! Кроме того, для scipy, я должен был сделать export LAPACK=~/src/lapack-3.5.0/вместо добавления libflapack.aв конце.
— Легенда

328

Если вам нужно использовать последние версии SciPy, а не упакованную версию, не прибегая к хлопотам сборки BLAS и LAPACK, вы можете выполнить следующую процедуру.

Установить библиотеки линейной алгебры из репозитория (для Ubuntu),

sudo apt-get install gfortran libopenblas-dev liblapack-dev

Затем установите SciPy (после загрузки исходного кода SciPy): python setup.py installили

pip install scipy

В зависимости от обстоятельств.


11
Это сработало для меня, ТКС! Хотя мне пришлось поменять libopenblas-devна libblas-dev(Ubuntu 10.04).
— alfetopito

1
отлично работал для меня, запустив Mint 13 (точный форк). Вам нужно скачать исходный код отдельно, если вы используете easy_install -U #update
— wbg

2
Работало без нареканий. Мне не нужно было делать ничего другого в моем случае (Ubuntu 12.0.4)
— MisterWalrus

1
sudo apt-get install python-devпочинил это. stackoverflow.com/a/21530768/125507
— эндолит

3
sudo yum install blas-devel lapack-develработал для меня
— Роман

66

На Fedora это работает:

 yum install lapack lapack-devel blas blas-devel
 pip install numpy
 pip install scipy

Не забудьте установить « lapack-devel » и « blas-devel » в дополнение к «blas» и «lapack», в противном случае вы получите указанную ошибку или ошибку «numpy.distutils.system_info. LapackNotFoundError ».


Там написано, что "открытый ключ для blas-dev .." не установлен. :(
— Ольга Му

@OlgaMu Используйте "yum --nogpgcheck install blas-devel"
— Muneeb Ali

blas-static& lapack-staticпотребовались для меня на fedora 20.
— варочные панели

Спасибо! Это сработало для меня на моей машине AWS EC2 Amazon Linux.
— Lil 'Bits

Это не работает для виртуальной среды, однако, это терпит неудачу, если я не использую sudo для установки pip. Любые идеи?
— user1610719 15.12.15

44

Я полагаю, вы говорите об установке в Ubuntu. Просто используйте:

apt-get install python-numpy python-scipy

Это должно заботиться и о компиляции библиотек BLAS. Иначе, компиляция библиотек BLAS очень сложна.


12
@ V3ss0n, строить BLAS и LAPACK очень сложно. Намного проще скомпилировать и установить ядра с нуля, чем компилировать эти два проклятых пакета imho.
— Николас Манкузо

@ Кодер, я понял, как это сделать на моем компьютере с Debian. Должно работать и на Ubuntu. проверить это: ydevel.tumblr.com/post/37462965735/… [ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я - автор поста]
— yati sagade

@NicholasMancuso Это действительно сложно, но мне удается построить целый Python (Relocatable) + Lapack + ATLAS (лучше, чем BLAS) Scipy, Scikit, Maplotlib, NetworkX и множество других зависимостей Си. Вся моя папка времени выполнения теперь 900 МБ (включая Python, Perl, Java), ха-ха. Но это делает мои проекты полностью перемещенными с собственной средой выполнения в одной папке. Дайте мне знать, если вам это нужно. Намного лучше, чем Virtualenv.
— Phyo Arkar Lwin

@yatisagade, @Coder, действительно, вы должны иметь возможность использовать pip install scipyили создавать его из исходного кода в виртуальной среде.
— Артур


2

Следование инструкциям, приведенным в 'cfi', работает для меня, хотя есть несколько фрагментов, которые вам могут понадобиться:

1) Ваш каталог lapack после распаковки может называться lapack-XY (номер версии), поэтому вы можете просто переименовать его в LAPACK.

cd ~/src
mv lapack-[tab] LAPACK

2) В этом каталоге вам может понадобиться:

cd ~/src/LAPACK 
cp lapack_LINUX.a libflapack.a

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.