在没有英特尔的情况下编译 numpy MKL/BLAS/ATLAS/LAPACK

Compile numpy WITHOUT Intel MKL/BLAS/ATLAS/LAPACK

我正在使用 py2exe 转换一个使用 numpy 的脚本,我得到一个非常大的结果文件夹,而且很多大文件似乎来自 [=12] 的一部分=] 我没有使用的包,例如 numpy.linalg.

为了减少创建的文件夹的大小,我被引导相信我应该 numpy 在没有英特尔 MKL/BLAS/ATLAS/LAPACK 的情况下编译。

我将如何进行此更改?

编辑
C:\Python27\Lib\site-packages\numpy\linalg 中,我发现了以下文件:_umath_linalg.pyd (34MB) 和 lapack_lite.pyd (18MB),它们在使用 py2exe 时被复制到分发文件夹中。如果可能的话,我想消除对这些的依赖,同时仍然能够使用 numpy 数组。包含的另一个大文件位于 C:\Python27\Lib\site-packages\numpy\core 中,名为 _dotblas.pyd (12MB)。是否也可以删除它?

根据 official documentation:

Disabling ATLAS and other accelerated libraries

Usage of ATLAS and other accelerated libraries in Numpy can be disabled via:

  BLAS=None LAPACK=None ATLAS=None python setup.py build

但是,此信息似乎已过时,因为我发现即使使用这些选项,numpy v1.9.2 仍会自动找到 libopenblas.so:

numpy_source_dir/$ BLAS=None LAPACK=None ATLAS=None python setup.py config
...
openblas_info:
  FOUND:
    libraries = ['openblas', 'openblas']
    library_dirs = ['/opt/OpenBLAS/lib']
    language = f77

  FOUND:
    libraries = ['openblas', 'openblas']
    library_dirs = ['/opt/OpenBLAS/lib']
    language = f77
...

一种解决方法是将 site.cfg.example 复制到 site.cfg,然后对其进行编辑,使相关 BLAS/LAPACK 库的路径无效:

[openblas]
libraries =
library_dirs =
include_dirs =

当您随后调用 BLAS=None LAPACK=None ATLAS=None python setup.py config 时,您应该得到包含以下内容的输出:

...
openblas_info:
/home/alistair/src/python/numpy/numpy/distutils/system_info.py:594: UserWarning: Specified path  is invalid.
  warnings.warn('Specified path %s is invalid.' % d)
  libraries  not found in []
  NOT AVAILABLE
...

我希望相同的方法适用于 ATLAS 和 MKL,尽管我没有安装这些库来进行适当的测试。

当然,您应该知道,没有加速 BLAS/LAPACK 库会对线性代数运算的性能产生 不利影响。


更新

正如下面评论中提到的,您实际上并没有“编译”您当前版本的 numpy,而是从二进制分发版安装它。我上面给出的方法需要你从源代码构建 numpy,这在 Windows 中不是一件容易的事情(尽管有官方说明 here)。

一个更简单的选择是安装 Christoph Gohlke 网站 here.

提供的 unoptimized numpy 二进制文件之一