Python SciPy是否需要BLAS?

发布于 2021-01-29 15:00:09

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,但是一直出现此错误(明显地设置了环境变量之后)。

关注者
0
被浏览
81
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    SciPy的网页用来提供构建和安装说明,但说明现在依靠操作系统二进制分发。要在没有预编译所需库软件包的操作系统上构建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位体系结构或要编译为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库。如果您周全,则可以暂时将blas库移至指定位置以测试lapack。我是一个懒惰的人,所以我相信开发人员可以使其工作并仅在SciPy中进行验证。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看