首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python SciPy需要BLAS吗?

Python SciPy需要BLAS吗?
EN

Stack Overflow用户
提问于 2011-09-21 16:11:55
回答 7查看 124.9K关注 0票数 180
代码语言:javascript
复制
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,但一直收到这个错误(显然是在设置了环境变量之后)。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2012-02-07 17:08:31

SciPy webpage过去常常提供构建和安装说明,但那里的说明现在依赖于OS二进制发行版。要在没有所需库的预编译包的操作系统上构建SciPy (和NumPy),必须构建并静态链接到Fortran库BLASLAPACK

代码语言:javascript
复制
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网页的说明在这里也对我有帮助,但我必须修改它们以适应我的环境:

代码语言:javascript
复制
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时应将这些选项设置为相同的值,这一点很重要。如果您忘记了-fPIC,SciPy实际上会给您一个关于缺少符号的错误,并建议您使用此开关。在我的设置中,make.inc的特定部分如下所示:

代码语言:javascript
复制
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库移动到指定的位置以测试lapack。我是一个懒惰的人,所以我相信开发人员会让它工作,并只在SciPy中验证。

票数 143
EN

Stack Overflow用户

发布于 2013-01-27 04:18:03

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

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

代码语言:javascript
复制
sudo apt-get install gfortran libopenblas-dev liblapack-dev

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

代码语言:javascript
复制
pip install scipy

视具体情况而定。

票数 333
EN

Stack Overflow用户

发布于 2013-03-08 11:56:59

在Fedora上,这是可行的:

代码语言:javascript
复制
 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“错误。

票数 66
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7496547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档