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.

ฉันต้องดาวน์โหลด tar ตัวไหนจากเว็บไซต์นี้?

ฉันลอง fortrans แล้ว แต่ฉันได้รับข้อผิดพลาดนี้ (หลังจากตั้งค่าตัวแปรสภาพแวดล้อมอย่างชัดเจน)


ดังนั้นคำถามคือรุ่นที่ถูกต้องสำหรับระบบของคุณที่จะดาวน์โหลดจากบางเว็บไซต์ แต่ไม่มีรายละเอียดของระบบและเว็บไซต์ใด ๆ ไม่น่าแปลกใจที่ไม่มีคำตอบที่กำลังจะมาถึง
Michael J. Barber

คำตอบ:


143

SciPy หน้าเว็บใช้เพื่อให้การสร้างและการติดตั้งคำแนะนำ แต่คำแนะนำที่มีตอนนี้พึ่งพา OS กระจายไบนารี ในการสร้าง SciPy (และ NumPy) บนระบบปฏิบัติการโดยไม่ต้องมีแพ็คเกจที่คอมไพล์แล้วของไลบรารีที่ต้องการคุณจะต้องสร้างและจากนั้นลิงก์แบบคงที่ไปยังไลบรารี Fortran BLASและ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

ดำเนินการคำสั่ง g77 / gfortran / ifort เพียงหนึ่งเดียวเท่านั้น ฉันได้แสดงความคิดเห็นทั้งหมด แต่ gfortran ที่ฉันใช้ การติดตั้ง LAPACK ต่อมาต้องการคอมไพเลอร์Fortran 90และเนื่องจากการติดตั้งทั้งสองควรใช้คอมไพเลอร์ Fortran เดียวกันดังนั้นจึงไม่ควรใช้ g77 สำหรับ BLAS

ถัดไปคุณจะต้องติดตั้ง LAPACK ทุกอย่าง คำแนะนำของหน้าเว็บ SciPy ช่วยฉันด้วยเช่นกัน แต่ฉันต้องแก้ไขให้เหมาะกับสภาพแวดล้อมของฉัน:

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

อัปเดตเมื่อวันที่ 3 ก.ย. 2558: ยืนยันความคิดเห็นบางส่วนในวันนี้ (ขอบคุณทุกคน): ก่อนที่จะmake lapacklibทำการแก้ไขmake.incไฟล์และเพิ่ม-fPICตัวเลือกOPTSและNOOPTการตั้งค่า ถ้าคุณอยู่ในสถาปัตยกรรม 64 -m64บิตหรือต้องการที่จะรวบรวมหนึ่งยังเพิ่ม เป็นสิ่งสำคัญที่ BLAS และ LAPACK จะถูกคอมไพล์ด้วยตัวเลือกเหล่านี้ที่ตั้งค่าเป็นค่าเดียวกัน หากคุณลืม-fPICSciPy จะทำให้เกิดข้อผิดพลาดเกี่ยวกับสัญลักษณ์ที่หายไปและจะแนะนำสวิตช์นี้ ส่วนเฉพาะของmake.incลักษณะเช่นนี้ในการตั้งค่าของฉัน:

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

บนเครื่องเก่า (เช่น RedHat 5), gfortran อาจจะมีการติดตั้งในรุ่นเก่า (เช่น 4.1.2) -frecursiveและไม่เข้าใจตัวเลือก เพียงลบออกจากmake.incไฟล์ในกรณีเช่นนี้

เป้าหมายการทดสอบ lapack ของ Makefile ล้มเหลวในการตั้งค่าของฉันเพราะไม่พบห้องสมุด blas หากคุณถี่ถ้วนคุณสามารถย้ายไลบรารี blas ไปยังตำแหน่งที่ระบุชั่วคราวเพื่อทดสอบ lapack ฉันเป็นคนขี้เกียจดังนั้นฉันจึงเชื่อมั่นว่าบรรดานักพัฒนาซอฟต์แวร์จะใช้งานได้และตรวจสอบเฉพาะใน SciPy


5
ไม่มี libfblas ใน blas.tgz
joedborg

32
ทำงานให้กับผม แต่ผมต้องแก้ไขmake.incไฟล์โดยการตั้งค่าและOPTS = -O2 -fPIC NOOPT = -O0 -fPIC
gui11aume

8
@jdborg มันเห็นได้ชัดว่าเพิ่งจะเรียกว่า liblapack.a ตอนนี้
una_dinosauria

7
ฉันต้องเพิ่มตัวเลือก -m64 ในการตั้งค่า OPTS และ NOOPT ในไฟล์ make.inc มีเพียงคุณเท่านั้นที่อยู่ในเครื่อง 64 บิต
mjspier

21
+1 ขอบคุณมากสำหรับสิ่งนี้! นอกจากนี้สำหรับ scipy ฉันต้องทำexport LAPACK=~/src/lapack-3.5.0/แทนการเพิ่มlibflapack.aในตอนท้าย
คำอธิบาย

328

หากคุณจำเป็นต้องใช้ SciPy เวอร์ชันล่าสุดแทนที่จะเป็นแพ็คเกจที่บรรจุไว้โดยไม่ต้องวุ่นวายกับการสร้าง BLAS และ LAPACK คุณสามารถทำตามขั้นตอนด้านล่าง

ติดตั้งไลบรารีพีชคณิตเชิงเส้นจากที่เก็บ (สำหรับ Ubuntu)

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

จากนั้นติดตั้ง SciPy (หลังจากดาวน์โหลดแหล่ง SciPy): python setup.py installหรือ

pip install scipy

แล้วแต่กรณี


11
มันใช้งานได้สำหรับฉัน tks! แม้ว่าฉันต้องเปลี่ยนlibopenblas-devเป็นlibblas-dev(Ubuntu 10.04)
alfetopito

1
ทำงานได้อย่างสมบูรณ์แบบสำหรับฉันที่ใช้ Mint 13 (ทางแยกที่แม่นยำ) คุณต้องดาวน์โหลดซอร์สแยกต่างหากถ้าคุณใช้ easy_install -U
#update

2
มันทำงานได้อย่างไม่มีที่ติ ฉันไม่ต้องทำอะไรที่แตกต่างในกรณีของฉัน (ubuntu 12.0.4)
MisterWalrus

1
sudo apt-get install python-devซ่อมมัน. stackoverflow.com/a/21530768/125507
endolith

3
sudo yum install blas-devel lapack-develทำงานให้ฉัน
Roman

66

ใน Fedora การทำงานนี้:

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

อย่าลืมติดตั้ง ' lapack-devel ' และ ' blas-devel ' นอกเหนือจาก 'blas' และ 'lapack' มิฉะนั้นคุณจะได้รับข้อผิดพลาดที่คุณกล่าวถึงหรือข้อผิดพลาด " numpy.distutils.system_info LapackNotFoundError "


มันบอกว่า "ไม่ได้ติดตั้งกุญแจสาธารณะสำหรับ blas-dev .. " :(
Olga Mu

@OlgaMu ใช้ "yum --nogpgcheck install blas-devel"
Muneeb Ali

blas-static& lapack-staticถูกต้องสำหรับฉันใน fedora 20.
hobs

ขอบคุณ! สิ่งนี้ใช้ได้กับเครื่อง AWS EC2 Amazon Linux ของฉัน
Lil 'Bits

มันใช้งานไม่ได้กับสภาพแวดล้อมแบบเวอร์ชวลแม้ว่ามันจะล้มเหลวเว้นแต่ฉันจะใช้ sudo สำหรับการติดตั้ง pip ความคิดใด ๆ
user1610719

44

ฉันเดาว่าคุณกำลังพูดถึงการติดตั้งใน Ubuntu เพียงใช้:

apt-get install python-numpy python-scipy

ที่ควรดูแลห้องสมุด BLAS รวบรวมเช่นกัน อื่นการรวบรวมไลบรารี BLAS นั้นยากมาก


12
@ V3ss0n การสร้าง BLAS และ LAPACK นั้นมีชื่อเสียงอย่างมาก มันง่ายกว่าในการคอมไพล์และติดตั้งเมล็ดตั้งแต่เริ่มต้นกว่าการคอมไพล์แพ็กเกจที่ถูกสาปทั้งสอง
Nicholas Mancuso

@Coder ฉันคิดวิธีการทำสิ่งนี้ในกล่อง Debian ของฉัน ควรทำงานกับ Ubuntu เช่นกัน ตรวจสอบนี้: ydevel.tumblr.com/post/37462965735/… [หมายเหตุ: ฉันเป็นผู้เขียนของโพสต์]
yati sagade

@NicholasMancuso มันยากจริงๆ แต่ฉันจัดการเพื่อสร้าง python ทั้งหมด (relocatable) + Lapack + ATLAS (ดีกว่า BLAS) Scipy, Scikit, Maplotlib, NetworkX และอื่น ๆ อีกมาก C Dependencies โฟลเดอร์ Runtime ทั้งหมดของฉันตอนนี้ 900 MB (Python, Perl, Java รวมด้วย) haha, แต่นั่นทำให้โปรเจ็กต์ของฉันย้ายไปอยู่กับการใช้งานจริงในโฟลเดอร์เดียว แจ้งให้เราทราบหากคุณต้องการมัน เป็นวิธีที่ดีกว่า Virtualenv
Phyo Arkar Lwin

@yatisagade, @Coder แน่นอนคุณต้องสามารถใช้pip install scipyหรือสร้างจากแหล่งในสภาพแวดล้อมเสมือน
Arthur


2

ทำตามคำแนะนำที่ได้รับจาก 'cfi' นั้นใช้งานได้สำหรับฉันแม้ว่าจะมีบางชิ้นที่เหลือที่คุณอาจต้องการ:

1) ไดเรกทอรี lapack ของคุณหลังจากการคลายซิปอาจถูกเรียกว่า lapack-XY (บางหมายเลขเวอร์ชั่น) ดังนั้นคุณสามารถเปลี่ยนชื่อมันเป็น LAPACK ได้

cd ~/src
mv lapack-[tab] LAPACK

2) ในไดเรกทอรีนั้นคุณอาจต้องทำ:

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.