Нужен ли 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.

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

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

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

Ответы:

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.

CFI
источник
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

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

AIB
источник
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
RickG
источник
-3

Попробуйте использовать

sudo apt-get install python3-scipy
李华强
источник