Python SciPy'nin BLAS'a ihtiyacı var mı?


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.

Bu siteden hangi katranı indirmem gerekiyor?

Fortrans denedim, ama bu hatayı almaya devam ediyorum (açıkça ortam değişkenini ayarladıktan sonra).


Yani soru, sisteminizin bir siteden indirmesi için doğru sürümün hangisidir, ancak soruda ne sistem detayları ne de site verilmemiştir? Hiçbir yanıtın gelmesi şaşırtıcı değil.
Michael J. Barber

Yanıtlar:


143

Scipy web sayfasını inşa ve montaj talimatları vermek için kullanılır, ancak orada talimatlar şimdi OS ikili dağılımları güveniyor. Eğer inşa etmek ve daha sonra statik kütüphaneler Fortran bağlantı vermelidir, gerekli kütüphanelerin önceden derlenmiş paketleri olmadan işletim sistemlerinde scipy (ve numpy) inşa etmek BLAS ve 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

Beş g77 / gfortran / ifort komutundan yalnızca birini yürütün. Ben, ama kullandığım gfortran tüm yorum var. Sonraki LAPACK yüklemesi bir Fortran 90 derleyicisi gerektirir ve her iki kurulum da aynı Fortran derleyicisini kullanması gerektiğinden, g77 BLAS için kullanılmamalıdır.

Ardından, LAPACK öğelerini yüklemeniz gerekir. SciPy web sayfasının talimatları burada da bana yardımcı oldu, ancak bunları ortamıma uyacak şekilde değiştirmek zorunda kaldım:

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

Verified bazı yorumlar bugün (herkese teşekkürler): Güncelleme 3-Sep-2015 tarihinde çalıştırmadan önce make lapacklibdüzenlemek make.incdosyası ve ekleme -fPICseçeneği OPTSve NOOPTayarları. 64 bit mimarideyseniz veya bir mimari için derlemek istiyorsanız, ekleyin -m64. BLAS ve LAPACK'in aynı değerlere ayarlanmış bu seçeneklerle derlenmesi önemlidir. Unutursanız -fPICSciPy aslında eksik semboller hakkında bir hata verecektir ve bu anahtarı önerecektir. make.incKurulumumda belirli bir bölüm şöyle görünüyor:

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

Eski makinelerde (örneğin RedHat 5), gfortran daha eski bir sürüme (örneğin 4.1.2) yüklenebilir ve seçeneği anlamıyor -frecursive. Bu make.incgibi durumlarda dosyayı dosyadan kaldırmanız yeterlidir .

Makefile'nin lapack test hedefi kurulumumda başarısız oluyor çünkü blas kütüphanelerini bulamıyor. Kapsamlıysanız, bindirmeyi test etmek için blas kitaplığını geçici olarak belirtilen konuma taşıyabilirsiniz. Tembel bir insanım, bu yüzden sadece SciPy'de çalışmasını ve doğrulamasını sağlamak için geliştiricilere güveniyorum.


5
Ancak blas.tgz'de libfblas yoktur.
joedborg

32
Benim için çalıştı, ama ve make.incayarlayarak dosyayı düzenlemek zorunda kaldı . OPTS = -O2 -fPICNOOPT = -O0 -fPIC
gui11aume

8
@jdborg görünüşe göre sadece liblapack.a olarak anılıyor
una_dinosauria

7
Make.inc dosyasındaki OPTS ve NOOPT ayarlarına -m64 seçeneklerini eklemek zorunda kaldım. Tabii ki sadece 64 bitlik bir makinedesiniz.
mjspier

21
+1 Bunun için çok teşekkürler! Ayrıca, scipy için , sonuna export LAPACK=~/src/lapack-3.5.0/eklemek yerine yapmak zorunda kaldım libflapack.a.
Efsane

328

BLAS ve LAPACK oluşturma zahmetine girmeden paketlenmiş sürüm yerine en son SciPy sürümlerini kullanmanız gerekiyorsa, aşağıdaki prosedürü takip edebilirsiniz.

Depodan doğrusal cebir kitaplıkları yükleyin (Ubuntu için),

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

Ardından SciPy'yi yükleyin (SciPy kaynağını indirdikten sonra): python setup.py installveya

pip install scipy

Gibi durumda olabilir.


11
Bu benim için çalıştı, tks! Her ne libopenblas-devkadar libblas-dev(Ubuntu 10.04) değiştirmek zorunda kaldım .
alfetopito

1
Mint 13 (hassas çatal) çalıştıran benim için mükemmel çalıştı. easy_install -U #update
wbg 13:14

2
Kusursuz çalıştı. Benim durumumda farklı bir şey yapmak zorunda kalmadım (Ubuntu 12.0.4)
MisterWalrus

1
sudo apt-get install python-devonu düzeltti. stackoverflow.com/a/21530768/125507
endolit

3
sudo yum install blas-devel lapack-develbenim için çalıştı
Roman

66

Fedora'da bu işe yarar:

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

' Blas ' ve 'lapack'e ek olarak ' lapack-devel 've' blas-devel ' yüklemeyi unutmayın, aksi takdirde bahsi geçen hatayı veya "numpy.distutils.system_info. LapackNotFoundError " hatasını alırsınız .


Yüklü değil "blas-dev .. için ortak anahtar" diyor. :(
Olga Mu

@OlgaMu "yum --nogpgcheck install blas-devel" kullanın
Muneeb Ali

blas-static& lapack-staticfedora 20'de benim için gerekliydi.
Ocaklar

Teşekkür ederim! Bu benim için AWS EC2 Amazon Linux makinemde çalıştı.
Lil 'Bits

Bu bir sanal çevre için işe yaramaz, ben pip yükleme için sudo kullanmazsanız başarısız oluyor. Herhangi bir fikir?
user1610719

44

Sanırım Ubuntu'daki kurulumdan bahsediyorsunuz. Sadece kullan:

apt-get install python-numpy python-scipy

Bu derleme BLAS kütüphaneleri ile ilgilenmelidir. Aksi halde, BLAS kütüphanelerini derlemek çok zordur.


12
@ V3ss0n, bina BLAS ve LAPACK herkesin bildiği gibi zor. Çekirdekleri derlemek ve sıfırdan kurmak, bu iki lanetli paketi imho'yu derlemekten çok daha kolaydır.
Nicholas Mancuso

@Coder, Debian kutumda bunu nasıl yapacağımı anladım. Ubuntu için de çalışmalı. şuna bir bak : ydevel.tumblr.com/post/37462965735/… [YASAL UYARI:
Yazının yazarıyım

@NicholasMancuso Gerçekten zor ama bütün python (Relocatable) + Lapack + ATLAS (BLAS'tan daha iyi) Scipy, Scikit, Maplotlib, NetworkX ve diğer C Bağımlılıklarının birçoğunu oluşturmayı başardım. Tüm Çalışma Zamanı klasörüm şimdi 900 MB (Python, Perl, Java da dahil) haha,. Ancak bu, projelerimin kendi çalışma zamanı ile tek bir klasörde tamamen taşınmasını sağlıyor. İhtiyacınız olursa bana bildirin. Virtualenv'den çok daha iyi.
Phyo Arkar Lwin

@yatisagade, @Coder, aslında, pip install scipysanal bir ortamda kullanmak veya kaynağından oluşturmak gerekir.
Arthur


2

İhtiyaç duyabileceğiniz birkaç parça olmasına rağmen, 'cfi' tarafından verilen talimatları takip etmek benim için çalışıyor:

1) Sıkıştırma dizininiz, sıkıştırdıktan sonra lapack-XY (bazı sürüm numarası) olarak adlandırılabilir, böylece LAPACK olarak yeniden adlandırabilirsiniz.

cd ~/src
mv lapack-[tab] LAPACK

2) Bu dizinde şunları yapmanız gerekebilir:

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.