Python SciPy是否需要BLAS?


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


因此,问题是您的系统可以从某个站点下载哪个版本,但是问题中没有提供系统详细信息或站点?没有答案就不足为奇了。
Michael J. Barber,

Answers:


143

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中进行验证。


5
blas.tgz中没有libfblas。
joedborg 2012年

32
为我工作,但我必须make.inc通过设置OPTS = -O2 -fPIC和来编辑文件NOOPT = -O0 -fPIC
gui11aume13年

8
@jdborg它现在显然被称为liblapack.a
una_dinosauria

7
我必须将-m64选项添加到make.inc文件中的OPTS和NOOPT设置中。当然,只有你们一个人在64位计算机上。
mjspier 2013年

21
+1非常感谢!另外,对于scipy,我不得不做export LAPACK=~/src/lapack-3.5.0/而不是libflapack.a最后添加。
联想

328

如果您需要使用最新版本的SciPy而非打包的版本,而无需经历构建BLAS和LAPACK的麻烦,则可以按照以下过程进行操作。

从存储库安装线性代数库(对于Ubuntu),

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

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

pip install scipy

视情况可以是。


11
这对我有用,tks!尽管我不得不更改libopenblas-devlibblas-dev(Ubuntu 10.04)。
alfetopito 2013年

1
完美的工作对我来说运行薄荷13(精确叉)。你需要单独下载源代码,如果你使用的easy_install -U #UPDATE
世界银行集团

2
它完美地工作了。我的案子并没有做任何不同的事情(ubuntu 12.0.4)
MisterWalrus 2014年

1
sudo apt-get install python-dev解决它。stackoverflow.com/a/21530768/125507
endolith

3
sudo yum install blas-devel lapack-devel为我工作
罗马

66

在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 ”错误。


它说“未安装blas-dev ..的公钥”。:(
奥尔加·穆

@OlgaMu使用“ yum --nogpgcheck install blas-devel”
Muneeb Ali

blas-staticlapack-static被要求我在Fedora 20
灶台

谢谢!这在我的AWS EC2 Amazon Linux计算机上为我工作。
Lil'Bits 2015年

但是,这对于虚拟环境不起作用,除非我使用sudo进行pip安装,否则它将失败。有任何想法吗?
user1610719

44

我猜您在谈论在Ubuntu中进行安装。只需使用:

apt-get install python-numpy python-scipy

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


12
@ V3ss0n,构建BLAS和LAPACK非常困难。从头开始编译和安装内核比编译那两个该死的软件包恕我直言要容易得多。
Nicholas Mancuso 2012年

@Coder,我想出了如何在Debian盒子上做到这一点。应该也适用于Ubuntu。检查一下:ydevel.tumblr.com/post/37462965735/… [免责声明:我是帖子的作者]
yati sagade 2013年

@NicholasMancuso确实很困难,但是我设法构建了整个python(可重定位)+ Lapack + ATLAS(比BLAS更好)Scipy,Scikit,Maplotlib,NetworkX以及许多其他C依赖项。我的整个Runtime文件夹现在为900 MB(也包括Python,Perl,Java)哈哈。但是,这使我的项目完全通过其自身的运行时重新放置在一个文件夹中。让我知道你是否需要它。比Virtualenv好很多。
Phyo Arkar Lwin

@ yatisagade,@ Coder,实际上,您需要能够pip install scipy在虚拟环境中从源使用或构建它。
亚瑟


2

遵循“ cfi”给出的说明对我有用,尽管它们遗漏了一些您可能需要的部分:

1)解压缩后的lapack目录可能称为lapack-XY(某些版本号),因此您可以将其重命名为LAPACK。

cd ~/src
mv lapack-[tab] LAPACK

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.