Apakah Python SciPy membutuhkan 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.

Tar mana yang harus saya unduh dari situs ini?

Saya sudah mencoba fortrans, tetapi saya terus mendapatkan kesalahan ini (setelah menetapkan variabel lingkungan jelas).

joedborg
sumber
Jadi pertanyaannya adalah versi mana yang tepat untuk diunduh sistem dari beberapa situs, tetapi tidak ada detail sistem atau situs yang diberikan dalam pertanyaan? Tidak mengherankan bahwa tidak ada jawaban yang muncul.
Michael J. Barber

Jawaban:

143

Halaman web SciPy digunakan untuk memberikan instruksi pembangunan dan instalasi, tetapi instruksi di sana sekarang bergantung pada distribusi biner OS. Untuk membangun SciPy (dan NumPy) pada sistem operasi tanpa paket yang telah dikompilasi dari pustaka yang diperlukan, Anda harus membuat dan kemudian secara statis menautkan ke pustaka Fortran BLAS dan 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

Jalankan hanya satu dari lima perintah g77 / gfortran / ifort. Saya sudah berkomentar semua, tapi gfortran yang saya gunakan. Instalasi LAPACK selanjutnya membutuhkan kompiler Fortran 90 , dan karena kedua pemasangan harus menggunakan kompiler Fortran yang sama, G77 tidak boleh digunakan untuk BLAS.

Selanjutnya, Anda harus menginstal barang-barang LAPACK. Petunjuk halaman web SciPy juga membantu saya di sini, tetapi saya harus memodifikasinya agar sesuai dengan lingkungan saya:

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

Pembaruan pada 3-Sep-2015: Terverifikasi beberapa komentar hari ini (terima kasih untuk semua): Sebelum menjalankan make lapacklibedit make.incfile dan tambahkan -fPICopsi ke OPTSdan NOOPTpengaturan. Jika Anda menggunakan arsitektur 64bit atau ingin mengompilasinya, tambahkan juga -m64. Adalah penting bahwa BLAS dan LAPACK dikompilasi dengan opsi-opsi ini diatur ke nilai yang sama. Jika Anda lupa -fPICSciPy benar-benar akan memberi Anda kesalahan tentang simbol yang hilang dan akan merekomendasikan switch ini. Bagian spesifik make.inctampilannya seperti ini di pengaturan saya:

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

Pada mesin lama (mis. RedHat 5), gfortran mungkin diinstal dalam versi yang lebih lama (misal 4.1.2) dan tidak mengerti opsi -frecursive. Cukup hapus dari make.incfile dalam kasus seperti itu.

Target uji lapack dari Makefile gagal dalam pengaturan saya karena tidak dapat menemukan perpustakaan blas. Jika Anda teliti, Anda dapat memindahkan pustaka blas untuk sementara waktu ke lokasi yang ditentukan untuk menguji lapack. Saya orang yang malas, jadi saya percaya para devs membuatnya bekerja dan memverifikasi hanya di SciPy.

cfi
sumber
5
Tidak ada libfblas di blas.tgz.
joedborg
32
Bekerja untuk saya, tetapi saya harus mengedit make.incfile dengan mengatur OPTS = -O2 -fPICdan NOOPT = -O0 -fPIC.
gui11aume
8
@jdborg itu tampaknya disebut hanya liblapack.a sekarang
una_dinosauria
7
Saya harus menambahkan opsi -m64 ke pengaturan OPTS dan NOOPT di file make.inc. Hanya Anda yang menggunakan mesin 64 bit tentunya.
mjspier
21
+1 Terima kasih banyak untuk ini! Juga, untuk lalai, saya harus melakukan export LAPACK=~/src/lapack-3.5.0/alih - alih menambahkan libflapack.apada akhirnya.
Legenda
328

Jika Anda perlu menggunakan versi SciPy terbaru daripada versi paket, tanpa melalui kerumitan membangun BLAS dan LAPACK, Anda dapat mengikuti prosedur di bawah ini.

Instal pustaka aljabar linier dari repositori (untuk Ubuntu),

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

Kemudian instal SciPy, (setelah mengunduh sumber SciPy): python setup.py installatau

pip install scipy

Seperti halnya mungkin.

AIB
sumber
11
Ini berhasil bagi saya, tks! Meskipun saya harus mengubah libopenblas-devke libblas-dev(Ubuntu 10,04).
alfetopito
1
bekerja dengan sempurna untuk saya menjalankan Mint 13 (fork tepat). Anda harus mengunduh sumbernya secara terpisah, jika Anda menggunakan easy_install -U #update
wbg
2
Itu bekerja dengan sempurna. Saya tidak perlu melakukan sesuatu yang berbeda dalam kasus saya (ubuntu 12.0.4)
MisterWalrus
1
sudo apt-get install python-devmemperbaikinya. stackoverflow.com/a/21530768/125507
endolith
3
sudo yum install blas-devel lapack-develbekerja untuk saya
Roman
66

Di Fedora, ini berfungsi:

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

Jangan lupa untuk menginstal ' lapack-devel ' dan ' blas-devel ' selain 'blas' dan 'lapack' jika tidak, Anda akan mendapatkan kesalahan yang Anda sebutkan atau kesalahan "numpy.distutils.system_info. LapackNotFoundError ".

Muneeb Ali
sumber
Dikatakan "kunci publik untuk blas-dev .." tidak diinstal. :(
Olga Mu
@OlgaMu Gunakan "yum --nogpgcheck install blas-devel"
Muneeb Ali
blas-static& lapack-staticDiperlukan untuk saya di fedora 20.
hobs
Terima kasih! Ini bekerja untuk saya di mesin Amazon Linux AWS EC2 saya.
Lil 'Bits
Ini tidak bekerja untuk lingkungan virtual, itu gagal kecuali saya menggunakan sudo untuk instalasi pip. Ada ide?
user1610719
44

Saya kira Anda berbicara tentang instalasi di Ubuntu. Cukup gunakan:

apt-get install python-numpy python-scipy

Itu harus mengurus kompilasi perpustakaan BLAS juga. Lain, kompilasi perpustakaan BLAS sangat sulit.

Vishwanath
sumber
12
@ V3ss0n, membangun BLAS dan LAPACK sangat sulit. Jauh lebih mudah untuk mengompilasi dan menginstal kernel dari awal daripada mengkompilasi kedua paket terkutuk itu.
Nicholas Mancuso
@Coder, saya menemukan cara untuk melakukan ini di kotak Debian saya. Harus bekerja untuk Ubuntu juga. lihat ini: ydevel.tumblr.com/post/37462965735/… [PENOLAKAN: Saya penulis posting]
yati sagade
@NicholasMancuso Memang sulit tapi saya berhasil membangun seluruh python (Relocatable) + Lapack + ATLAS (Lebih baik daripada BLAS) Scipy, Scikit, Maplotlib, NetworkX, dan banyak Ketergantungan C lainnya. Seluruh folder Runtime saya sekarang 900 MB (Python, Perl, Java juga disertakan) haha ​​,. Tapi itu membuat proyek saya benar-benar dipindahkan dengan runtime sendiri dalam satu folder. Beri tahu saya jika Anda membutuhkannya. Jauh lebih baik daripada Virtualenv.
Phyo Arkar Lwin
@yatisagade, @Coder, tentu saja, Anda harus dapat menggunakan pip install scipyatau membangunnya dari sumber di lingkungan virtual.
Arthur
2

Mengikuti instruksi yang diberikan oleh 'cfi' bekerja untuk saya, meskipun ada beberapa bagian yang mereka butuhkan:

1) Direktori lapack Anda, setelah unzipping, dapat disebut lapack-XY (beberapa nomor versi), jadi Anda bisa mengganti nama itu menjadi LAPACK.

cd ~/src
mv lapack-[tab] LAPACK

2) Dalam direktori itu, Anda mungkin perlu melakukan:

cd ~/src/LAPACK 
cp lapack_LINUX.a libflapack.a
RickG
sumber
-3

Coba gunakan

sudo apt-get install python3-scipy
李华强
sumber