1. ホーム
  2. python

[解決済み] Python SciPyにBLASは必要ですか?

2022-04-20 13:25:55

質問

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

どうすればいいですか?

その SciPyのウェブページ 以前は、ビルドとインストールの手順を提供していましたが、現在ではOSのバイナリ配布に依存しています。必要なライブラリのプリコンパイルパッケージがないOSでSciPy(およびNumPy)をビルドするには、Fortranライブラリをビルドして静的にリンクする必要があります。 BLAS ラパック :

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の5つのコマンドのうち、1つだけを実行します。私が使っている gfortran 以外はコメントアウトしています。その後のLAPACKのインストールでは フォートラン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は、これらのオプションを同じ値に設定してコンパイルすることが重要です。もし -fPIC SciPy は実際にシンボル不足のエラーを出し、この切り替えを推奨します。の特定のセクションは 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 ファイルを作成します。

Makefile の lapack テストターゲットは、私のセットアップでは blas ライブラリが見つからないため失敗しました。もしあなたが徹底しているならば、一時的にblasライブラリを指定された場所に移動してlapackをテストすることができます。私は怠け者なので、開発者を信頼して、SciPyでのみ動作確認をしています。