Python SciPy có cần BLAS không?


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.

Tôi cần tải tar nào ra khỏi trang này?

Tôi đã thử các fortrans, nhưng tôi vẫn gặp lỗi này (sau khi đặt biến môi trường rõ ràng).


Vì vậy, câu hỏi là phiên bản phù hợp để hệ thống của bạn tải xuống từ một số trang web, nhưng không phải chi tiết hệ thống cũng như trang web được đưa ra trong câu hỏi? Không có gì đáng ngạc nhiên khi không có câu trả lời nào được đưa ra.
Michael J. Thợ cắt tóc

Câu trả lời:


143

Trang web SciPy được sử dụng để cung cấp các hướng dẫn xây dựng và cài đặt, nhưng các hướng dẫn hiện có dựa trên các bản phân phối nhị phân của HĐH. Để xây dựng SciPy (và NumPy) trên các hệ điều hành mà không có các gói được biên dịch sẵn của các thư viện cần thiết, bạn phải xây dựng và sau đó liên kết tĩnh với các thư viện Fortran BLASLAPACK :

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

Chỉ thực hiện một trong năm lệnh g77 / gfortran / ifort. Tôi đã nhận xét tất cả, nhưng gfortran mà tôi sử dụng. Quá trình cài đặt LAPACK tiếp theo yêu cầu trình biên dịch Fortran 90 và vì cả hai cài đặt nên sử dụng cùng một trình biên dịch Fortran, nên không nên sử dụng g77 cho BLAS.

Tiếp theo, bạn sẽ cần cài đặt công cụ LAPACK. Các hướng dẫn của trang web SciPy cũng giúp tôi ở đây, nhưng tôi phải sửa đổi chúng cho phù hợp với môi trường của mình:

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

Cập nhật vào ngày 3 tháng 9 năm 2015: Đã xác minh một số nhận xét hôm nay (cảm ơn tất cả): Trước khi chạy make lapacklibchỉnh sửa make.inctệp và thêm -fPICtùy chọn OPTSNOOPTcài đặt. Nếu bạn đang ở trên một kiến ​​trúc 64 bit hoặc muốn biên dịch cho một kiến ​​trúc, hãy thêm -m64. Điều quan trọng là BLAS và LAPACK được biên dịch với các tùy chọn này được đặt thành cùng một giá trị. Nếu bạn quên -fPICSciPy thực sự sẽ cung cấp cho bạn một lỗi về các ký hiệu bị thiếu và sẽ đề xuất chuyển đổi này. Phần cụ thể make.inctrông như thế này trong thiết lập của tôi:

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

Trên các máy cũ (ví dụ RedHat 5), gfortran có thể được cài đặt trong phiên bản cũ hơn (ví dụ 4.1.2) và không hiểu tùy chọn -frecursive. Đơn giản chỉ cần loại bỏ nó khỏi make.inctập tin trong những trường hợp như vậy.

Mục tiêu kiểm tra lapack của Makefile không thành công trong thiết lập của tôi vì nó không thể tìm thấy các thư viện blas. Nếu bạn kỹ lưỡng, bạn có thể tạm thời di chuyển thư viện blas đến vị trí đã chỉ định để kiểm tra lapack. Tôi là một người lười biếng, vì vậy tôi tin tưởng các nhà phát triển sẽ làm cho nó hoạt động và chỉ xác minh trong SciPy.


5
Không có libfblas trong blas.tgz mặc dù.
joedborg

32
Làm việc cho tôi, nhưng tôi phải chỉnh sửa make.inctập tin bằng cách cài đặt OPTS = -O2 -fPICNOOPT = -O0 -fPIC.
gui11aume

8
@jdborg bây giờ rõ ràng chỉ được gọi là liblapack.a
una_dinosauria

7
Tôi đã phải thêm các tùy chọn -m64 vào cài đặt OPTS và NOOPT trong tệp make.inc. Tất nhiên chỉ có bạn ở trên máy 64 bit.
mjspier

21
+1 Cảm ơn rất nhiều vì điều này! Ngoài ra, đối với scipy, tôi phải làm export LAPACK=~/src/lapack-3.5.0/thay vì thêm libflapack.avào cuối cùng.
Truyền thuyết

328

Nếu bạn cần sử dụng các phiên bản mới nhất của SciPy thay vì phiên bản đóng gói, mà không gặp rắc rối khi xây dựng BLAS và LAPACK, bạn có thể làm theo quy trình dưới đây.

Cài đặt thư viện đại số tuyến tính từ kho lưu trữ (cho Ubuntu),

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

Sau đó cài đặt SciPy, (sau khi tải xuống nguồn SciPy): python setup.py installhoặc

pip install scipy

Như trường hợp có thể.


11
Điều này làm việc cho tôi, tks! Mặc dù tôi đã phải đổi libopenblas-devsang libblas-dev(Ubuntu 10.04).
alfetopito

1
hoạt động hoàn hảo đối với tôi khi chạy Mint 13 (ngã ba chính xác). Bạn cần tải xuống nguồn riêng, nếu bạn sử dụng easy_install -U #update
wbg

2
Nó hoạt động hoàn hảo. Tôi không phải làm gì khác trong trường hợp của mình (ubfox 12.0.4)
MisterWalrus

1
sudo apt-get install python-devĐã sửa nó. stackoverflow.com/a/21530768/125507
endolith

3
sudo yum install blas-devel lapack-devellàm việc cho tôi
Roman

66

Trên Fedora, điều này hoạt động:

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

Hãy nhớ cài đặt ' lapack-devel ' và ' blas-devel ' ngoài 'blas' và 'lapack' nếu không bạn sẽ gặp lỗi bạn đã đề cập hoặc lỗi "numpy.distutils.system_info. LapackNotFoundError ".


Nó nói "khóa công khai cho blas-dev .." chưa được cài đặt. :(
Olga Mu

@OlgaMu Sử dụng "yum --nogpgcheck cài đặt blas-devel"
Muneeb Ali

blas-static& lapack-staticđược yêu cầu cho tôi trên fedora 20.
hobs

Cảm ơn bạn! Điều này làm việc cho tôi trên máy AWS EC2 Amazon Linux của tôi.
Lil 'Bits

Điều này không hoạt động cho một môi trường ảo mặc dù, nó không thành công trừ khi tôi sử dụng sudo cho cài đặt pip. Có ý kiến ​​gì không?
dùng1610719

44

Tôi đoán bạn đang nói về cài đặt trong Ubuntu. Chỉ dùng:

apt-get install python-numpy python-scipy

Điều đó cũng sẽ chăm sóc các thư viện BLAS biên dịch. Khác, biên dịch các thư viện BLAS là rất khó khăn.


12
@ V3ss0n, xây dựng BLAS và LAPACK nổi tiếng là khó khăn. Việc biên dịch và cài đặt kernel từ đầu dễ dàng hơn nhiều so với biên dịch hai gói imho đó.
Nicholas Mancuso

@Coder, tôi đã tìm ra cách để làm điều này trên hộp Debian của tôi. Nên làm việc cho Ubuntu là tốt. kiểm tra xem: ydevel.tumblr.com/post/37462965735/ cấp [TUYÊN BỐ: Tôi là tác giả của bài đăng]
yati sagade

@NicholasMancuso Thật sự khó khăn nhưng tôi quản lý để xây dựng toàn bộ python (Relocitable) + Lapack + ATLAS (Tốt hơn BLAS) Scipy, Scikit, Maplotlib, NetworkX và rất nhiều phụ thuộc C khác. Toàn bộ thư mục Runtime của tôi hiện có 900 MB (bao gồm cả Python, Perl, Java) haha ​​,. Nhưng điều đó làm cho các dự án của tôi hoàn toàn di dời với thời gian chạy riêng trong một thư mục. Hãy cho tôi biết nếu bạn cần nó. Cách tốt hơn nhiều so với Virtualenv.
Phyo Arkar Lwin

@yatisagade, @Coder, thực sự, bạn cần có khả năng sử dụng pip install scipyhoặc xây dựng nó từ nguồn trong một môi trường ảo.
Arthur


2

Làm theo các hướng dẫn do 'cfi' đưa ra cho tôi, mặc dù có một vài phần họ bỏ qua mà bạn có thể cần:

1) Thư mục lapack của bạn, sau khi giải nén, có thể được gọi là lapack-XY (một số số phiên bản), vì vậy bạn chỉ cần đổi tên nó thành LAPACK.

cd ~/src
mv lapack-[tab] LAPACK

2) Trong thư mục đó, bạn có thể cần phải làm:

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.