Czy Python SciPy potrzebuje 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.

Który plik tar muszę pobrać z tej strony?

Wypróbowałem fortrans, ale ciągle otrzymuję ten błąd (oczywiście po ustawieniu zmiennej środowiskowej).

joedborg
źródło
Pytanie brzmi, która wersja jest odpowiednia dla twojego systemu do pobrania z jakiejś witryny, ale w pytaniu nie podano ani szczegółów systemu, ani witryny? Nic dziwnego, że nie nadeszły żadne odpowiedzi.
Michael J. Barber,

Odpowiedzi:

143

Strona internetowa SciPy była używana do dostarczania instrukcji kompilacji i instalacji, ale teraz instrukcje tam opierają się na dystrybucjach binarnych systemu operacyjnego. Aby zbudować SciPy (i NumPy) w systemach operacyjnych bez prekompilowanych pakietów wymaganych bibliotek, musisz zbudować, a następnie statycznie połączyć się z bibliotekami Fortran BLAS i 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

Wykonaj tylko jedno z pięciu poleceń g77 / gfortran / ifort. Skomentowałem wszystko oprócz gfortranu, którego używam. Kolejna instalacja LAPACK wymaga kompilatora Fortran 90 , a ponieważ obie instalacje powinny używać tego samego kompilatora Fortran, g77 nie powinien być używany dla BLAS.

Następnie musisz zainstalować rzeczy LAPACK. Instrukcje ze strony SciPy również mi pomogły, ale musiałem je zmodyfikować, aby pasowały do ​​mojego środowiska:

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

Aktualizacja w dniu 3 września 2015 r .: Zweryfikowano dziś niektóre komentarze (dzięki wszystkim): Przed uruchomieniem make lapacklibedytuj make.incplik i dodaj -fPICopcję OPTSi NOOPTustawienia. Jeśli korzystasz z architektury 64-bitowej lub chcesz ją skompilować, dodaj również -m64. Ważne jest, aby BLAS i LAPACK zostały skompilowane z tymi opcjami ustawionymi na te same wartości. Jeśli zapomnisz, -fPICSciPy faktycznie wyświetli błąd dotyczący brakujących symboli i zaleci ten przełącznik. Konkretna sekcja make.incwygląda tak w mojej konfiguracji:

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

Na starych maszynach (np. RedHat 5) gfortran może być zainstalowany w starszej wersji (np. 4.1.2) i nie obsługuje opcji -frecursive. make.incW takich przypadkach po prostu usuń go z pliku.

Cel testu lapack pliku Makefile nie działa w mojej konfiguracji, ponieważ nie może znaleźć bibliotek blas. Jeśli jesteś dokładny, możesz tymczasowo przenieść bibliotekę blas do określonej lokalizacji, aby przetestować lapack. Jestem leniwym człowiekiem, więc ufam programistom, że będą działać i weryfikować tylko w SciPy.

cfi
źródło
5
Jednak w blas.tgz nie ma bibliotek libfblas.
joedborg
32
Pracowało dla mnie, ale musiałem edytować make.incplik, ustawiając OPTS = -O2 -fPICi NOOPT = -O0 -fPIC.
gui11aume
8
@jdborg, teraz najwyraźniej nazywa się po prostu liblapack.a
una_dinosauria
7
Musiałem dodać opcje -m64 do ustawień OPTS i NOOPT w pliku make.inc. Oczywiście tylko z Was korzystacie z 64-bitowej maszyny.
mjspier
21
+1 Wielkie dzięki za to! Ponadto w przypadku scipy musiałem to zrobić export LAPACK=~/src/lapack-3.5.0/zamiast dodawać libflapack.ana końcu.
Legend
328

Jeśli potrzebujesz używać najnowszych wersji SciPy zamiast wersji spakowanej, bez przechodzenia przez kłopoty związane z budowaniem BLAS i LAPACK, możesz postępować zgodnie z poniższą procedurą.

Zainstaluj biblioteki algebry liniowej z repozytorium (dla Ubuntu),

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

Następnie zainstaluj SciPy (po pobraniu źródła SciPy): python setup.py installlub

pip install scipy

W przypadku.

AIB
źródło
11
To zadziałało dla mnie, tks! Chociaż musiałem zmienić libopenblas-devna libblas-dev(Ubuntu 10.04).
alfetopito
1
działało idealnie dla mnie z Mint 13 (precyzyjny widelec). Musisz pobrać źródło osobno, jeśli używasz easy_install -U #update
wbg
2
Działało bez zarzutu. W moim przypadku nie musiałem robić nic innego (ubuntu 12.0.4)
MisterWalrus
1
sudo apt-get install python-devnaprawione. stackoverflow.com/a/21530768/125507
endolith
3
sudo yum install blas-devel lapack-develpracował dla mnie
Roman
66

W Fedorze to działa:

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

Pamiętaj, aby zainstalować „ lapack-devel ” i „ blas-devel ” oprócz „blas” i „lapack”, w przeciwnym razie pojawi się błąd, o którym wspomniałeś, lub błąd „numpy.distutils.system_info. LapackNotFoundError ”.

Muneeb Ali
źródło
Mówi „klucz publiczny dla blas-dev ..” nie jest zainstalowany. :(
Olga Mu
@OlgaMu Użyj „yum --nogpgcheck install blas-devel”
Muneeb Ali
blas-statici lapack-staticbyły wymagane dla mnie na Fedorze 20.
płyty kuchenne
Dziękuję Ci! To zadziałało dla mnie na mojej maszynie AWS EC2 Amazon Linux.
Lil 'Bits
To jednak nie działa w środowisku wirtualnym, kończy się niepowodzeniem, chyba że użyję sudo do instalacji pip. Jakieś pomysły?
user1610719
44

Chyba mówisz o instalacji w Ubuntu. Po prostu użyj:

apt-get install python-numpy python-scipy

Powinno to zająć się również kompilacją bibliotek BLAS. W przeciwnym razie kompilacja bibliotek BLAS jest bardzo trudna.

Vishwanath
źródło
12
@ V3ss0n, budowanie BLAS i LAPACK są niezwykle trudne. O wiele łatwiej jest skompilować i zainstalować jądro od zera niż kompilowanie tych dwóch przeklętych pakietów imho.
Nicholas Mancuso
@Coder, wymyśliłem, jak to zrobić na moim pudełku Debiana. Powinien działać również dla Ubuntu. sprawdź to: ydevel.tumblr.com/post/37462965735/ ... [ZASTRZEŻENIE: jestem autorem posta]
yati sagade
@NicholasMancuso To rzeczywiście trudne, ale udaje mi się zbudować cały Python (Relocatable) + Lapack + ATLAS (Better than BLAS) Scipy, Scikit, Maplotlib, NetworkX i wiele innych zależności języka C. Cały mój folder Runtime teraz 900 MB (w tym Python, Perl, Java) haha. Ale to sprawia, że ​​moje projekty są całkowicie przenoszone z własnym środowiskiem wykonawczym w jednym folderze. Daj mi znać, jeśli tego potrzebujesz. O wiele lepiej niż Virtualenv.
Phyo Arkar Lwin
@yatisagade, @Coder, rzeczywiście, musisz być w stanie używać go pip install scipylub budować ze źródła w środowisku wirtualnym.
Arthur,
2

Postępowanie zgodnie z instrukcjami podanymi przez `` cfi '' działa dla mnie, chociaż jest kilka elementów, które pominęli, których możesz potrzebować:

1) Twój katalog lapack, po rozpakowaniu, może nazywać się lapack-XY (jakiś numer wersji), więc możesz po prostu zmienić jego nazwę na LAPACK.

cd ~/src
mv lapack-[tab] LAPACK

2) W tym katalogu może być konieczne wykonanie:

cd ~/src/LAPACK 
cp lapack_LINUX.a libflapack.a
RickG
źródło
-3

Spróbuj użyć

sudo apt-get install python3-scipy
李华强
źródło