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.