Python SciPy 需要 BLAS 吗?

Posted

技术标签:

【中文标题】Python SciPy 需要 BLAS 吗?【英文标题】:Does Python SciPy need BLAS? 【发布时间】:2011-11-21 17:33:18 【问题描述】:
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,但我一直收到这个错误(显然设置了环境变量之后)。

【问题讨论】:

所以问题是哪个版本适合您的系统从某个站点下载,但问题中既没有给出系统详细信息也没有给出站点?没有答案也就不足为奇了。 【参考方案1】:

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

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

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

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

pip install scipy

视情况而定。

【讨论】:

这对我有用,tks!虽然我不得不将 libopenblas-dev 更改为 libblas-dev (Ubuntu 10.04)。 非常适合我运行 Mint 13(精确分叉)。如果您使用 easy_install -U #update,您需要单独下载源代码 它完美无缺。在我的情况下,我不必做任何不同的事情(ubuntu 12.0.4) sudo apt-get install python-dev 已修复。 ***.com/a/21530768/125507 sudo yum install blas-devel lapack-devel 为我工作【参考方案2】:

SciPy webpage 用于提供构建和安装说明,但现在那里的说明依赖于 OS 二进制发行版。要在没有所需库的预编译包的操作系统上构建 SciPy(和 NumPy),您必须构建并静态链接到 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 日更新: 今天验证了一些 cmets(感谢所有人):在运行 make lapacklib 之前编辑 make.inc 文件并将 -fPIC 选项添加到 OPTSNOOPT 设置。如果您使用的是 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 库移动到指定位置来测试 lapack。我是一个懒惰的人,所以我相信开发人员可以让它工作并仅在 SciPy 中进行验证。

【讨论】:

blas.tgz 中没有 libfblas。 为我工作,但我必须通过设置 OPTS = -O2 -fPICNOOPT = -O0 -fPIC 来编辑 make.inc 文件。 @jdborg 它现在显然被称为 liblapack.a 我必须在 make.inc 文件的 OPTS 和 NOOPT 设置中添加 -m64 选项。当然只有你们使用 64 位机器。 +1 非常感谢!另外,对于 scipy,我必须做 export LAPACK=~/src/lapack-3.5.0/ 而不是最后添加 libflapack.a【参考方案3】:

在 Fedora 上,这有效:

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

记得安装 'lapack-devel' 和 'blas-devel' 除了 'blas' 和 'lapack' 否则你会得到你提到的错误或“numpy.distutils.system_info.LapackNotFoundError”错误。

【讨论】:

它说“blas-dev 的公钥..”未安装。 :( @OlgaMu 使用“yum --nogpgcheck install blas-devel” blas-static & lapack-static 在 Fedora 20 上对我来说是必需的。 谢谢!这在我的 AWS EC2 Amazon Linux 机器上对我有用。 这对虚拟环境不起作用,除非我使用 sudo 进行 pip 安装,否则它会失败。有什么想法吗?【参考方案4】:

我猜你说的是在 Ubuntu 中安装。只需使用:

apt-get install python-numpy python-scipy

这也应该负责 BLAS 库的编译。否则,编译 BLAS 库非常困难。

【讨论】:

@V3ss0n,构建 BLAS 和 LAPACK 是出了名的困难。从头开始编译和安装内核比编译这两个该死的软件包要容易得多。 @Coder,我想出了如何在我的 Debian 机器上执行此操作。也应该适用于 Ubuntu。看看这个:ydevel.tumblr.com/post/37462965735/… [免责声明:我是帖子的作者] @NicholasMancuso 这确实很困难,但我设法构建了整个 python(可重定位)+ Lapack + ATLAS(比 BLAS 更好) Scipy、Scikit、Maplotlib、NetworkX 和许多其他 C 依赖项。我的整个运行时文件夹现在 900 MB(也包括 Python、Perl、Java)哈哈。但这使我的项目完全重新定位,并在一个文件夹中拥有自己的运行时。让我知道你是否需要它。比 Virtualenv 好多了。 @yatisagade,@Coder,确实,您需要能够使用pip install scipy 或在虚拟环境中从源代码构建它。【参考方案5】:

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

http://www.lfd.uci.edu/~gohlke/pythonlibs/#scipy-stack

【讨论】:

【参考方案6】:

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

1) 你的 lapack 目录,解压后可能会叫 lapack-X-Y(一些版本号),所以你可以把它重命名为 LAPACK。

cd ~/src
mv lapack-[tab] LAPACK

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

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

【讨论】:

【参考方案7】:

尝试使用

sudo apt-get install python3-scipy

【讨论】:

以上是关于Python SciPy 需要 BLAS 吗?的主要内容,如果未能解决你的问题,请参考以下文章

在 macOS 上安装 SciPy 时未找到 BLAS/LAPACK 库

windows: Python安装scipy,scikit-image时提示"no lapack/blas resources found"的解决方法

在 Windows10 上的 Python 3.10 中安装 scipy 时出错

如何检查 NumPy 和 SciPy 中的 BLAS/LAPACK 链接?

Windows下用PIP安装scipy出现no lapack/blas resources found

在 GCP Dataflow 上的 python apache 光束中使用 scipy