我正在使用py2exe
转换使用numpy
的脚本并获得一个非常大的结果文件夹,似乎很多大文件来自numpy
的部分内容我不使用的套餐,例如numpy.linalg
。
为了减少创建的文件夹的大小,我被认为应该在没有英特尔MKL / BLAS / ATLAS / LAPACK的情况下编译numpy
。
我将如何进行此更改?
修改
在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)。是否也可以删除它?
答案 0 :(得分:6)
禁用ATLAS和其他加速库
在Numpy中使用ATLAS和其他加速库可以 通过以下方式禁用:
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二进制文件之一。