小编典典

Python SciPy 需要 BLAS 吗?

all

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,但我一直收到这个错误(显然在设置环境变量之后)。


阅读 81

收藏
2022-08-02

共1个答案

小编典典

SciPy
网页
曾经提供构建和安装说明,但现在那里的说明依赖于
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 时将这些选项设置为相同的值。如果你忘记了-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
-frecursive。在这种情况下,只需将其从make.inc文件中删除即可。

Makefile 的 lapack 测试目标在我的设置中失败,因为它找不到 blas 库。如果你很彻底,你可以暂时将 blas 库移动到指定位置来测试
lapack。我是一个懒惰的人,所以我相信开发人员可以让它工作并仅在 SciPy 中进行验证。

2022-08-02