Python SciPy ha bisogno di 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.

Quale tar devo scaricare da questo sito?

Ho provato i fortrans, ma continuo a ricevere questo errore (dopo aver impostato la variabile d'ambiente ovviamente).


Quindi la domanda è qual è la versione giusta per il tuo sistema da scaricare da qualche sito, ma né i dettagli di sistema né il sito sono indicati nella domanda? Non è sorprendente che nessuna risposta fosse imminente.
Michael J. Barber,

Risposte:


143

La pagina Web SciPy era utilizzata per fornire istruzioni di costruzione e installazione, ma le istruzioni lì ora si basano sulle distribuzioni binarie del sistema operativo. Per compilare SciPy (e NumPy) su sistemi operativi senza pacchetti precompilati delle librerie richieste, è necessario compilare e quindi collegarsi staticamente alle librerie 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

Esegui solo uno dei cinque comandi g77 / gfortran / ifort. Ho commentato tutto, ma il gfortran che uso. La successiva installazione di LAPACK richiede un compilatore Fortran 90 e poiché entrambe le installazioni devono utilizzare lo stesso compilatore Fortran, g77 non deve essere utilizzato per BLAS.

Successivamente, dovrai installare le cose LAPACK. Le istruzioni della pagina web di SciPy mi hanno aiutato anche qui, ma ho dovuto modificarle per adattarle al mio 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

Aggiornamento del 3-set-2015: verificati alcuni commenti oggi (grazie a tutti): prima di eseguire make lapacklibmodificare il make.incfile e aggiungere -fPICopzioni OPTSe NOOPTimpostazioni. Se si utilizza un'architettura a 64 bit o si desidera compilare per una, aggiungere anche -m64. È importante che BLAS e LAPACK siano compilati con queste opzioni impostate sugli stessi valori. Se dimentichi che -fPICSciPy ti darà effettivamente un errore sui simboli mancanti e ti consiglierà questo interruttore. La sezione specifica di make.incassomiglia a questa nella mia configurazione:

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

Su macchine vecchie (ad es. RedHat 5), gfortran potrebbe essere installato in una versione precedente (ad es. 4.1.2) e non comprende l'opzione -frecursive. Basta rimuoverlo dal make.incfile in questi casi.

Il target del test del lapack del Makefile fallisce nella mia configurazione perché non riesce a trovare le librerie blas. Se sei accurato, puoi spostare temporaneamente la libreria blas nella posizione specificata per testare il lapack. Sono una persona pigra, quindi mi fido degli sviluppatori di farlo funzionare e verificare solo in SciPy.


5
Non ci sono libfblas in blas.tgz però.
joedborg,

32
Ha funzionato per me, ma ho dovuto modificare il make.incfile impostando OPTS = -O2 -fPICe NOOPT = -O0 -fPIC.
gui11aume,

8
@jdborg a quanto pare si chiama solo liblapack.a ora
una_dinosauria

7
Ho dovuto aggiungere le opzioni -m64 alle impostazioni OPTS e NOOPT nel file make.inc. Ovviamente solo voi siete su una macchina a 64 bit.
mjspier,

21
+1 Mille grazie per questo! Inoltre, per Scipy, ho dovuto fare export LAPACK=~/src/lapack-3.5.0/invece di aggiungere il libflapack.aalla fine.
Legenda

328

Se è necessario utilizzare le ultime versioni di SciPy anziché la versione in pacchetto, senza passare attraverso il fastidio di creare BLAS e LAPACK, è possibile seguire la procedura seguente.

Installa librerie di algebra lineare dal repository (per Ubuntu),

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

Quindi installare SciPy, (dopo aver scaricato il sorgente SciPy): python setup.py installo

pip install scipy

Nel caso che fosse.


11
Questo ha funzionato per me, tks! Anche se ho dovuto passare libopenblas-deva libblas-dev(Ubuntu 10.04).
alfetopito,

1
ha funzionato perfettamente per me con Mint 13 (fork preciso). Devi scaricare il sorgente separatamente, se usi easy_install -U #update
wbg

2
Ha funzionato perfettamente. Non ho dovuto fare nulla di diverso nel mio caso (Ubuntu 12.0.4)
MisterWalrus,

1
sudo apt-get install python-devaggiustato. stackoverflow.com/a/21530768/125507
endolith il

3
sudo yum install blas-devel lapack-develha funzionato per me
Roman,

66

Su Fedora, questo funziona:

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

Ricorda di installare ' lapack-devel ' e ' blas-devel ' oltre a 'blas' e 'lapack', altrimenti otterrai l'errore che hai citato o l'errore "numpy.distutils.system_info. LapackNotFoundError ".


Dice "chiave pubblica per blas-dev .." non installato. :(
Olga Mu

@OlgaMu Usa "yum --nogpgcheck install blas-devel"
Muneeb Ali

blas-statice lapack-staticmi è stato richiesto per Fedora 20.
Piani cottura

Grazie! Questo ha funzionato per me sulla mia macchina Amazon Linux AWS EC2.
Lil 'Bits,

Questo non funziona per un ambiente virtuale, ma non funziona se non uso sudo per l'installazione pip. Qualche idea?
user1610719

44

Immagino tu stia parlando dell'installazione in Ubuntu. Usa solo:

apt-get install python-numpy python-scipy

Ciò dovrebbe occuparsi anche della compilazione delle librerie BLAS. Altrimenti, compilare le librerie BLAS è molto difficile.


12
@ V3ss0n, la costruzione di BLAS e LAPACK è notoriamente difficile. È molto più semplice compilare e installare kernel da zero piuttosto che compilare questi due dannati pacchetti imho.
Nicholas Mancuso,

@Coder, ho capito come farlo sulla mia scatola Debian. Dovrebbe funzionare anche per Ubuntu. dai un'occhiata a: ydevel.tumblr.com/post/37462965735/… [DISCLAIMER: sono l'autore del post]
yati sagade,

@NicholasMancuso È davvero difficile ma riesco a costruire l'intero pitone (trasferibile) + Lapack + ATLAS (meglio di BLAS) Scipy, Scikit, Maplotlib, NetworkX e molte altre dipendenze C. Tutta la mia cartella Runtime ora 900 MB (anche Python, Perl, Java incluso) haha ​​,. Ma ciò rende i miei progetti totalmente trasferiti con il proprio runtime in una cartella. Fammi sapere se ne hai bisogno. Molto meglio di Virtualenv.
Phyo Arkar Lwin,

@yatisagade, @Coder, infatti, devi essere in grado di usarlo pip install scipyo costruirlo dalla fonte in un ambiente virtuale.
Arthur,


2

Seguire le istruzioni fornite da 'cfi' funziona per me, anche se ci sono alcuni pezzi che potrebbero essere necessari:

1) La tua directory di lapack, dopo aver decompresso, può essere chiamata lapack-XY (un certo numero di versione), quindi puoi semplicemente rinominarla in LAPACK.

cd ~/src
mv lapack-[tab] LAPACK

2) In quella directory, potresti dover fare:

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.