O Python SciPy precisa de 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.

De qual tar eu preciso baixar deste site?

Eu tentei o fortrans, mas continuo recebendo esse erro (depois de definir a variável de ambiente obviamente).


Portanto, a questão é qual é a versão correta para o seu sistema baixar de algum site, mas nem os detalhes do sistema nem o site são fornecidos na pergunta? Não é de surpreender que não haja respostas.
Michael J. Barber

Respostas:


143

A página da Web SciPy costumava fornecer instruções de compilação e instalação, mas as instruções agora contam com distribuições binárias do SO. Para criar o SciPy (e NumPy) em sistemas operacionais sem pacotes pré-compilados das bibliotecas necessárias, você deve construir e vincular estaticamente às bibliotecas Fortran BLAS e 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

Execute apenas um dos cinco comandos g77 / gfortran / ifort. Eu comentei tudo, mas o gfortran que eu uso. A instalação subsequente do LAPACK requer um compilador Fortran 90 e, como ambas as instalações devem usar o mesmo compilador Fortran, o g77 não deve ser usado para o BLAS.

Em seguida, você precisará instalar o material LAPACK. As instruções da página SciPy também me ajudaram aqui, mas tive que modificá-las para se adequar ao meu ambiente:

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

Atualização em 3 de setembro de 2015: verificados alguns comentários hoje (obrigado a todos): Antes de executar, make lapacklibedite o make.incarquivo e adicione a -fPICopção OPTSe NOOPTconfigurações. Se você estiver em uma arquitetura de 64 bits ou quiser compilar uma, adicione também -m64. É importante que o BLAS e o LAPACK sejam compilados com essas opções definidas com os mesmos valores. Se você esquecer o -fPICSciPy, na verdade, ocorrerá um erro sobre a falta de símbolos e recomendará essa opção. A seção específica se make.incparece com isso na minha configuração:

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

Em máquinas antigas (por exemplo, RedHat 5), o gfortran pode ser instalado em uma versão mais antiga (por exemplo, 4.1.2) e não entende a opção -frecursive. Simplesmente remova-o do make.incarquivo nesses casos.

O alvo de teste lapack do Makefile falha na minha instalação porque não consegue encontrar as bibliotecas blas. Se você for completo, poderá mover temporariamente a biblioteca blas para o local especificado para testar o lapack. Como sou uma pessoa preguiçosa, confio nos desenvolvedores para que funcionem e verifiquem apenas no SciPy.


5
Não há libfblas no blas.tgz.
joedborg

32
Funcionou para mim, mas tive que editar o make.incarquivo definindo OPTS = -O2 -fPICe NOOPT = -O0 -fPIC.
gui11aume

8
@jdborg parece que é chamado apenas liblapack.a agora
una_dinosauria

7
Eu tive que adicionar as opções -m64 às configurações OPTS e NOOPT no arquivo make.inc. Somente vocês estão em uma máquina de 64 bits, é claro.
Mjspier 21/10

21
+1 Muito obrigado por isso! Além disso, para scipy, eu tive que fazer em export LAPACK=~/src/lapack-3.5.0/vez de adicionar o libflapack.ano final.
Legend

328

Se você precisar usar as versões mais recentes do SciPy em vez da versão empacotada, sem passar pelo incômodo de criar o BLAS e o LAPACK, siga o procedimento abaixo.

Instale bibliotecas de álgebra linear a partir do repositório (para Ubuntu),

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

Em seguida, instale o SciPy (depois de baixar a fonte do SciPy): python setup.py installou

pip install scipy

Conforme o caso.


11
Isso funcionou para mim, tks! Embora eu tenha que mudar libopenblas-devpara libblas-dev(Ubuntu 10.04).
Alfetopito

1
funcionou perfeitamente para mim correr Mint 13 (fork preciso) .Você necessidade de baixar a fonte separadamente, se você usar easy_install -U #update
wbg

2
Funcionou na perfeição. Eu não tenho que fazer nada de diferente no meu caso (ubuntu 12.0.4)
MisterWalrus

1
sudo apt-get install python-devconsertou. stackoverflow.com/a/21530768/125507
endolith 28/01

3
sudo yum install blas-devel lapack-develfuncionou para mim
Roman

66

No Fedora, isso funciona:

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

Lembre-se de instalar ' lapack-devel ' e ' blas-devel ', além de 'blas' e 'lapack', caso contrário, você receberá o erro mencionado ou o erro "numpy.distutils.system_info. LapackNotFoundError ".


Ele diz "chave pública para blas-dev .." não instalado. :(
Olga Mu

@OlgaMu Use "yum --nogpgcheck install blas-devel"
Muneeb Ali 3/13/13

blas-static& lapack-staticForam necessários para me no Fedora 20.
Placas

Obrigado! Isso funcionou para mim na minha máquina AWS EC2 Amazon Linux.
perfil completo de Lil Bits

No entanto, isso não funciona para um ambiente virtual, está falhando, a menos que eu use o sudo para a instalação do pip. Alguma ideia?
user1610719

44

Eu acho que você está falando sobre instalação no Ubuntu. Apenas use:

apt-get install python-numpy python-scipy

Isso deve cuidar da compilação das bibliotecas BLAS também. Senão, compilar as bibliotecas BLAS é muito difícil.


12
@ V3ss0n, construir BLAS e LAPACK é notoriamente difícil. É muito mais fácil compilar e instalar kernels a partir do zero do que compilar esses dois malditos pacotes imho.
Nicholas Mancuso

@ Codificador, eu descobri como fazer isso na minha caixa Debian. Deve funcionar para o Ubuntu também. veja isso: ydevel.tumblr.com/post/37462965735/... [AVISO: Eu sou o autor do post]
yati sagade

@NicholasMancuso É realmente difícil, mas consigo construir python inteiro (Relocável) + Lapack + ATLAS (Melhor que BLAS) Scipy, Scikit, Maplotlib, NetworkX e muitas outras Dependências C. Toda a minha pasta Runtime agora tem 900 MB (Python, Perl, Java também incluído) haha ​​,. Mas isso torna meus projetos totalmente realocados com seu próprio tempo de execução em uma pasta. Deixe-me saber se você precisar. Muito melhor que o Virtualenv.
Phyo Arkar Lwin

@yatisagade, @Coder, de fato, você precisa poder usá pip install scipy-lo ou compilá-lo da fonte em um ambiente virtual.
Arthur


2

Seguir as instruções dadas por 'cfi' funciona para mim, embora existam algumas peças que eles deixaram de fora que você pode precisar:

1) Seu diretório lapack, após descompactar, pode ser chamado lapack-XY (algum número de versão), para que você possa renomeá-lo para LAPACK.

cd ~/src
mv lapack-[tab] LAPACK

2) Nesse diretório, você pode precisar fazer:

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.