Benötigt 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.

Welchen Teer muss ich von dieser Seite herunterladen?

Ich habe die fortrans ausprobiert, erhalte aber immer wieder diesen Fehler (nachdem ich die Umgebungsvariable offensichtlich festgelegt habe).


Die Frage ist also, welche Version für Ihr System die richtige ist, um sie von einer Site herunterzuladen, aber in der Frage sind weder Systemdetails noch die Site angegeben. Es ist nicht überraschend, dass keine Antworten kamen.
Michael J. Barber

Antworten:


143

Die SciPy-Webseite , auf der Anweisungen zum Erstellen und Installieren bereitgestellt wurden, basiert jedoch jetzt auf binären Betriebssystemverteilungen. Um SciPy (und NumPy) auf Betriebssystemen ohne vorkompilierte Pakete der erforderlichen Bibliotheken zu erstellen, müssen Sie die Fortran-Bibliotheken BLAS und LAPACK erstellen und anschließend statisch verknüpfen :

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

Führen Sie nur einen der fünf Befehle g77 / gfortran / ifort aus. Ich habe alles auskommentiert, außer dem Gfortran, den ich benutze. Für die nachfolgende LAPACK-Installation ist ein Fortran 90- Compiler erforderlich. Da beide Installationen denselben Fortran-Compiler verwenden sollten, sollte g77 nicht für BLAS verwendet werden.

Als nächstes müssen Sie das LAPACK-Zeug installieren. Die Anweisungen der SciPy-Webseite haben mir auch hier geholfen, aber ich musste sie an meine Umgebung anpassen:

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

Update am 3. September 2015: Einige Kommentare wurden heute überprüft (danke an alle): make lapacklibBearbeiten Sie vor dem Ausführen die make.incDatei und fügen Sie -fPICOptionen OPTSund NOOPTEinstellungen hinzu. Wenn Sie sich in einer 64-Bit-Architektur befinden oder für eine kompilieren möchten, fügen Sie ebenfalls hinzu -m64. Es ist wichtig, dass BLAS und LAPACK mit diesen Optionen kompiliert werden, die auf dieselben Werte eingestellt sind. Wenn Sie vergessen, dass der -fPICSciPy tatsächlich einen Fehler über fehlende Symbole ausgibt und diesen Schalter empfiehlt. Der spezifische Abschnitt von make.incsieht in meinem Setup folgendermaßen aus:

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

Auf alten Computern (z. B. RedHat 5) ist gfortran möglicherweise in einer älteren Version (z. B. 4.1.2) installiert und versteht die Option nicht -frecursive. Entfernen Sie es make.incin solchen Fällen einfach aus der Datei.

Das Lapack-Testziel des Makefiles schlägt in meinem Setup fehl, da die Blas-Bibliotheken nicht gefunden werden können. Wenn Sie gründlich sind, können Sie die Blas-Bibliothek vorübergehend an den angegebenen Speicherort verschieben, um den Lapack zu testen. Ich bin eine faule Person, daher vertraue ich darauf, dass die Entwickler es funktionieren lassen und nur in SciPy überprüfen.


5
Es gibt jedoch keine libfblas in blas.tgz.
Joedborg

32
Arbeitete für mich, aber ich musste die make.incDatei durch Setzen von OPTS = -O2 -fPICund bearbeiten NOOPT = -O0 -fPIC.
gui11aume

8
@jdborg es heißt anscheinend nur liblapack.a jetzt
una_dinosauria

7
Ich musste die Optionen -m64 zu den OPTS- und NOOPT-Einstellungen in der Datei make.inc hinzufügen. Nur Sie sind natürlich auf einem 64-Bit-Computer.
mjspier

21
+1 Vielen Dank dafür! Auch für scipy musste ich tun, export LAPACK=~/src/lapack-3.5.0/anstatt das libflapack.aam Ende hinzuzufügen .
Legende

328

Wenn Sie die neuesten Versionen von SciPy anstelle der gepackten Version verwenden müssen, ohne sich um das Erstellen von BLAS und LAPACK kümmern zu müssen, können Sie die folgenden Schritte ausführen.

Installieren Sie lineare Algebra-Bibliotheken aus dem Repository (für Ubuntu).

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

Installieren Sie dann SciPy (nach dem Herunterladen der SciPy-Quelle): python setup.py installoder

pip install scipy

Wie es der Fall sein mag.


11
Das hat bei mir funktioniert, tks! Obwohl ich libopenblas-devauf libblas-dev(Ubuntu 10.04) umsteigen musste .
Alfetopito

1
funktionierte perfekt für mich mit Mint 13 (präzise Gabelung). Sie müssen die Quelle separat herunterladen, wenn Sie easy_install -U #update
wbg

2
Es hat einwandfrei funktioniert. Ich musste in meinem Fall nichts anderes tun (Ubuntu 12.0.4)
MisterWalrus

1
sudo apt-get install python-devbehoben. stackoverflow.com/a/21530768/125507
Endolith

3
sudo yum install blas-devel lapack-develarbeitete für mich
Roman

66

Auf Fedora funktioniert dies:

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

Denken Sie daran, ' lapack-devel ' und ' blas-devel ' zusätzlich zu 'blas' und 'lapack' zu installieren, da sonst der von Ihnen erwähnte Fehler oder der Fehler "numpy.distutils.system_info. LapackNotFoundError " angezeigt wird.


Es heißt "öffentlicher Schlüssel für blas-dev .." nicht installiert. :(
Olga Mu

@OlgaMu Verwenden Sie "yum --nogpgcheck install blas-devel"
Muneeb Ali

blas-static& lapack-staticwurden für mich auf Fedora 20 benötigt.
Kochfelder

Danke dir! Dies funktionierte für mich auf meinem AWS EC2 Amazon Linux-Computer.
Lil 'Bits

Dies funktioniert jedoch nicht für eine virtuelle Umgebung. Es schlägt fehl, es sei denn, ich verwende sudo für die Pip-Installation. Irgendwelche Ideen?
user1610719

44

Ich denke, Sie sprechen über die Installation in Ubuntu. Benutz einfach:

apt-get install python-numpy python-scipy

Das sollte sich auch um das Kompilieren der BLAS-Bibliotheken kümmern. Andernfalls ist das Kompilieren der BLAS-Bibliotheken sehr schwierig.


12
@ V3ss0n, BLAS und LAPACK zu erstellen ist notorisch schwierig. Es ist viel einfacher, Kernel von Grund auf neu zu kompilieren und zu installieren, als diese beiden verdammten Pakete imho zu kompilieren.
Nicholas Mancuso

@Coder, ich habe herausgefunden, wie das auf meiner Debian-Box geht. Sollte auch für Ubuntu funktionieren. Überprüfen Sie dies aus: ydevel.tumblr.com/post/37462965735/… [HAFTUNGSAUSSCHLUSS: Ich bin der Autor des Beitrags]
Yati Sagade

@NicholasMancuso Es ist in der Tat schwierig, aber ich schaffe es, ganze Python (verschiebbar) + Lapack + ATLAS (besser als BLAS) zu erstellen. Scipy, Scikit, Maplotlib, NetworkX und viele andere C-Abhängigkeiten. Mein ganzer Runtime-Ordner jetzt 900 MB (Python, Perl, Java auch enthalten) haha,. Dadurch werden meine Projekte mit einer eigenen Laufzeit in einem Ordner vollständig verschoben. Lassen Sie mich wissen, wenn Sie es brauchen. Viel besser als Virtualenv.
Phyo Arkar Lwin

@yatisagade, @Coder, in der Tat müssen Sie in der Lage sein pip install scipy, es in einer virtuellen Umgebung zu verwenden oder aus dem Quellcode zu erstellen .
Arthur


2

Das Befolgen der Anweisungen von 'cfi' funktioniert für mich, obwohl einige Teile weggelassen wurden, die Sie möglicherweise benötigen:

1) Ihr Lapack-Verzeichnis kann nach dem Entpacken als Lapack-XY (einige Versionsnummern) bezeichnet werden, sodass Sie es einfach in LAPACK umbenennen können.

cd ~/src
mv lapack-[tab] LAPACK

2) In diesem Verzeichnis müssen Sie möglicherweise Folgendes tun:

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.