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を試しましたが、このエラーが発生し続けます(明らかに環境変数を設定した後)。


質問はあなたのシステムがどこのサイトからダウンロードするのに適切なバージョンであるかですが、システムの詳細もサイトも質問に与えられていませんか?答えが出ないのは当然のことです。
マイケルJ.バーバー

回答:


143

scipyのダウンロード用Webページは、ビルドとインストール手順を提供するために使用されるが、そこの指示は今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

5つのg77 / gfortran / ifortコマンドの1つだけを実行します。私はすべてコメントアウトしましたが、使用しているgfortranは除きます。後続のLAPACKインストールにはFortran 90コンパイラが必要です。両方のインストールで同じFortranコンパイラを使用する必要があるため、BLASにg77を使用しないでください。

次に、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

2015年9月3日の更新:本日いくつかのコメントを確認しました(すべてに感謝):実行make lapacklibする前に、make.incファイルを編集して-fPICオプションOPTSNOOPT設定を追加します。64ビットアーキテクチャを使用している場合、または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など)でインストールされている可能性があり、optionを認識しません-frecursivemake.incこのような場合は、ファイルから削除してください。

Makefileのlapackテストターゲットは、blasライブラリが見つからないため、セットアップで失敗します。完全な場合は、一時的にライブラリを指定の場所に移動して、ラパックをテストできます。私は怠惰な人間なので、開発者がそれを機能させ、SciPyでのみ検証することを信頼しています。


5
blas.tgzにはlibfblasはありません。
joedborg 2012

32
うまくいきましたが、とをmake.inc設定してファイルを編集する必要がOPTS = -O2 -fPICありましたNOOPT = -O0 -fPIC
gui11aume 2013年

8
@jdborg明らかにliblapack.aと呼ばれています
una_dinosauria 2013

7
make.incファイルのOPTSおよびNOOPT設定に-m64オプションを追加する必要がありました。もちろんあなただけが64ビットマシンを使っています。
mjspier 2013年

21
+1これに感謝します!また、scipyの場合は、最後export LAPACK=~/src/lapack-3.5.0/にを追加するのlibflapack.aではなく、行う必要がありました。
Legend

328

BLASとLAPACKを構築する手間をかけずに、パッケージバージョンではなく最新バージョンのSciPyを使用する必要がある場合は、以下の手順に従ってください。

リポジトリから線形代数ライブラリをインストールします(Ubuntuの場合)。

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

次に、SciPyをインストールします(SciPyソースをダウンロードした後):python setup.py installまたは

pip install scipy

場合によっては。


11
これでうまくいきました、TKS!(Ubuntu 10.04)に変更libopenblas-devする必要がありましたがlibblas-dev
alfetopito 2013年

1
Mint 13(正確なフォーク)を実行している私にとっては完璧に機能しました。easy_install
U

2
それは完璧に機能しました。私の場合は何もする必要はありませんでした(ubuntu 12.0.4)
MisterWalrus 2014年

1
sudo apt-get install python-dev修正しました。stackoverflow.com/a/21530768/125507
Endolith '28年

3
sudo yum install blas-devel lapack-devel私のために働いた
ローマ

66

Fedoraでは、これは機能します:

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

「blas」と「lapack」に加えて「lapack-devel」と「blas-devel」をインストールすることを忘れないでください。そうしないと、言及したエラーまたは「numpy.distutils.system_info。LapackNotFoundError」エラーが発生します。


「blas-dev ..の公開鍵」がインストールされていないと表示されます。:(
Olga Mu

@OlgaMu「yum --nogpgcheck install blas-devel」を使用
Ali

blas-staticlapack-staticFedoraの20に私のために必要とされた
コンロ

ありがとうございました!これは、私のAWS EC2 Amazon Linuxマシンで機能しました。
Lil 'Bits

これは仮想環境では機能しませんが、pipのインストールにsudoを使用しない限り失敗します。何か案は?
user1610719

44

Ubuntuでのインストールについて話していると思います。ただ使用する:

apt-get install python-numpy python-scipy

これにより、BLASライブラリのコンパイルも処理されます。そうでなければ、BLASライブラリのコンパイルは非常に困難です。


12
@ V3ss0n、BLASとLAPACKの構築は悪名高いほど困難です。カーネルを最初からコンパイルしてインストールする方が、これら2つののろわれたパッケージをコンパイルするよりもはるかに簡単です。
Nicholas Mancuso

@ Coder、Debianボックスでこれを行う方法を見つけました。Ubuntuでも動作するはずです。これをチェックしてください:ydevel.tumblr.com/post/37462965735/… [免責事項:私は投稿者です]
yati sagade

@NicholasMancuso確かに難しいですが、python(再配置可能)+ Lapack + ATLAS(BLASより優れています)Scipy、Scikit、Maplotlib、NetworkX、およびその他のC依存関係の多くをビルドできました。ランタイムフォルダー全体が900 MB(Python、Perl、Javaも含まれています)になりました。しかし、それにより私のプロジェクトは1つのフォルダーに独自のランタイムで完全に再配置されます。必要な場合はお知らせください。Virtualenvよりもはるかに優れています。
Phyo Arkar Lwin 2013

@ yatisagade、@ Coder、確かpip install scipyに、仮想環境でソースから使用またはビルドできる必要があります。
アーサー


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.