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,但总是出现这个错误(显然是在设置了环境变量之后)。

126962 次浏览

我猜你说的是在 Ubuntu 中安装,只要使用:

apt-get install python-numpy python-scipy

这应该可以解决 BLAS 库的编译问题,否则,编译 BLAS 库是非常困难的。

本网站过去常常提供构建和安装指令,但是现在那里的指令依赖于 OS 二进制发行版。要在没有预编译所需库包的操作系统上构建 SciPy (和 NumPy) ,必须构建然后静态链接到 Fortran 库 布拉斯背包:

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

二零一五年九月三日更新: 今天验证了一些注释(感谢所有人) : 在运行 make lapacklib之前,编辑 make.inc文件并在 OPTSNOOPT设置中添加 -fPIC选项。如果您使用的是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 库到指定的位置来测试该笔记本电脑。我是一个懒惰的人,所以我相信开发人员有它的工作和验证只有在 SciPy。

按照“ cfi”给出的指示行事对我很有用,尽管他们遗漏了一些你可能需要的东西:

1)解压缩后,您的 LAPACK 目录可能被称为 LAPACK-X-Y (某个版本号) ,所以您可以将其重命名为 LAPACK。

cd ~/src
mv lapack-[tab] LAPACK

2)在该目录下,你可能需要:

cd ~/src/LAPACK
cp lapack_LINUX.a libflapack.a

如果您需要使用最新版本的 SciPy,而不是打包版本,无需经过建立 BLAS 和 LAPACK 的麻烦,您可以遵循以下程序。

从库中安装线性代数库(用于 Ubuntu) ,

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

然后安装 SciPy (在下载 SciPy 源代码之后) : python setup.py install

pip install scipy

视情况而定。

在 Fedora 上,这是可行的:

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

记住,除了“ blas”和“ lapack”之外,还要安装“ Lapack-Devel”和“ 无聊透顶”,否则您将得到您提到的错误或“ numpy.distutils.system _ info”。“ LapackNotFoundError”错误。

对于 Windows 用户,Chris 提供了一个不错的二进制软件包(警告: 下载量很大,191MB) :

尝试使用

sudo apt-get install python3-scipy