Python SciPy是否需要BLAS?

问题:

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 webpage用于提供构建和安装指令,但是现在的指令依赖于OS二进制分发。要在没有所需库的预编译包的操作系统上构建SciPy(和NumPy),您必须构建然后静态链接到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

只执行五个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

2015年9月3日更新:
验证一些评论(感谢所有):运行make lapacklib编辑make.inc文件并将-fPIC选项添加到OPTSNOOPT设置之前。如果你是一个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中工作和验证。

 
 Code问答: codewenda.com
Stackoverflow:Does Python SciPy need BLAS?

发表评论

电子邮件地址不会被公开。 必填项已用*标注

23 + = 24