Python SciPy需要BLAS吗?

jdb*_*org 173 python scipy

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.
Run Code Online (Sandbox Code Playgroud)

我需要从这个网站下载哪个tar?

我已经尝试了fortrans,但我一直收到这个错误(显然在设置了环境变量之后).

AIB*_*AIB 327

如果您需要使用最新版本的SciPy而不是打包版本,而无需经历构建BLAS和LAPACK的麻烦,您可以按照以下步骤操作.

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

sudo apt-get install gfortran libopenblas-dev liblapack-dev
Run Code Online (Sandbox Code Playgroud)

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

pip install scipy
Run Code Online (Sandbox Code Playgroud)

视情况可以是.

  • 这对我有用,tks!虽然我不得不将`libopenblas-dev`改为`libblas-dev`(Ubuntu 10.04). (11认同)
  • `sudo yum install blas-devel lapack-devel`为我工作 (3认同)
  • 它完美无缺.在我的情况下我没有做任何不同的事情(ubuntu 12.0.4) (2认同)
  • `sudo apt-get install python-dev` 修复了它。http://stackoverflow.com/a/21530768/125507 (2认同)

cfi*_*cfi 141

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
Run Code Online (Sandbox Code Playgroud)

仅执行五个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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

在旧机器(例如RedHat 5)上,gfortran可能安装在旧版本(例如4.1.2)中,并且不了解选项-frecursive.make.inc在这种情况下,只需将其从文件中删除即可.

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

  • 为我工作,但我必须通过设置`OPTS = -O2 -fPIC`和`NOOPT = -O0 -fPIC`来编辑`make.inc`文件. (32认同)
  • +1非常感谢!另外,对于scipy,我不得不`导出LAPACK =〜/ src/lapack-3.5.0 /`而不是最后添加`libflapack.a`. (20认同)
  • @jdborg现在显然只是名为liblapack.a (8认同)
  • 我必须将-m64选项添加到make.inc文件中的OPTS和NOOPT设置.当然,只有你在64位机器上. (7认同)
  • 但是blas.tgz中没有libfblas. (5认同)
  • 对于那些昨天开始投票的人,我想知道为什么.不应仅仅因为你喜欢另外一个答案而给出Downvotes.如果这个答案事实上不正确或者没有回答问题,应该给他们.请澄清.否则,downvotes无济于事. (3认同)
  • scipy网站不再提供这些说明,因此这个配方非常宝贵.对于那些最近的redhat/fedora/centos发行版,新程序是`sudo yum install -y"@Development Tools"gcc-gfortran blas-static lapack-static numpy-f2py numpy scipy && pip install --upgrade scipy` (2认同)

Mun*_*Ali 66

在Fedora上,这有效:

 yum install lapack lapack-devel blas blas-devel
 pip install numpy
 pip install scipy
Run Code Online (Sandbox Code Playgroud)

除了'blas'和'lapack'之外,请记得安装' lapack-devel '和' blas-devel ',否则你会得到你提到的错误或" numpy.distutils.system_info.LapackNotFoundError "错误.


Vis*_*ath 44

我猜你在谈论Ubuntu中的安装.只需使用:

apt-get install python-numpy python-scipy
Run Code Online (Sandbox Code Playgroud)

这应该照顾BLAS库编译.否则,编译BLAS库非常困难.

  • @ V3ss0n,建立BLAS和LAPACK是非常困难的.从头开始编译和安装内核要比编译这两个该死的软件包容易得多. (12认同)
  • 这不适用于virtualenv,不是吗? (5认同)

jmu*_*sch 12

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