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

SciPy网页用于提供构build和安装说明,但现在的说明依赖于OS二进制分发。 要在操作系统上构buildSciPy(和NumPy),而无需预编译所需库的包,则必须先构build并静态链接到Fortran库BLAS和LAPACK :

 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日更新:今天validation了一些评论(感谢所有人):在运行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文件中删除make.inc

Makefile的lapacktesting目标在我的设置中失败,因为它找不到blas库。 如果你是彻底的,你可以临时移动blas库到指定的位置来testinglapack。 我是一个懒惰的人,所以我相信开发者只能在SciPy中工作和validation。

如果您需要使用最新版本的SciPy而不是打包版本,而不需要经历构buildBLAS和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 '和' blas-devel ',否则你会得到你提到的错误或者“ numpy.distutils.system_info。LapackNotFoundError ”错误。

我想你正在谈论Ubuntu中的安装。 只要使用:

 apt-get install python-numpy python-scipy 

这也应该照顾BLAS库的编译。 否则,编译BLAS库是非常困难的。

对于Windows用户来说,Chris有一个很好的二进制包(警告:这是一个非常大的下载,191 MB):

按照“cfi”给出的指示为我工作,虽然他们遗漏了几件你可能需要:

1)你的lapack目录在解压后可能被称为lapack-XY(某些版本号),所以你可以重命名为LAPACK。

 cd ~/src mv lapack-[tab] LAPACK 

2)在该目录中,您可能需要执行以下操作:

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

尝试使用

 sudo apt-get install python3-scipy