减少 py2exe 分布大小,同时包含一些 numpy 函数

Reducing py2exe distribution size, while including some numpy functions

我有一个程序目前依赖于 numpy,我一直在用 py2exe 进行转换。我的问题是即使使用

这样的脚本
from numpy import array
print array(1)

仅使用函数 numpy.array,我找不到任何方法来排除 numpy 包中看似不必要的部分,例如 numpy.linalg 在创建的发行版中py2exe。这导致分发的大小超过 80MB(压缩后为 30MB)。文件夹中有一个名为 numpy.linalg._umath_linalg.pyd 的文件,大小为 34MB,另一个名为 numpy.linalg.lapack_lite.pyd 的文件大小为 18MB - 这些真的需要放在那里吗?! .exe 不会 运行 如果它们只是被删除。

我的问题是,我怎样才能减少生成的分布大小? 我知道有 py2exe 的替代方案,如果我可以消除对 numpy 我不会有这个问题,但我想坚持使用这两个。

以下安装脚本是我正在使用的,因此分配了 87MB。

from distutils.core import setup
import py2exe, sys
import shutil

sys.argv.append('py2exe') # No need to type in command line.

py2exe_options = {
        # 'excludes': ['numpy.linalg'], # Stopped the resulting exe from running
        'compressed': True, # Saves 5MB, is this at the cost of some speed?
        'optimize': 1 # I don't really understand what this does.
        }

setup(
    windows=[{'script': 'main.pyw'}],
    options={'py2exe': py2exe_options},
    )

shutil.rmtree('build', ignore_errors=True) # Remove the build folder

如果有人有任何进一步的建议,我想在这里提出!但这是我到目前为止所做的。

通过使用从 here 下载的 'unoptimized' 二进制文件重新安装 numpy,我已经设法将发行版的大小从 87MB 减少到 34MB。我相信这在进行线性代数运算时可能会 运行 慢得多,但它对我处理数组来说效果很好。

更新
通过更改我的 setup.py 脚本中的 py2exe 选项,我现在已经将我的发行版减少到 28MB。

import distutils.core import setup

py2exe_options = {
        'compressed': True,
        'optimize': 1, # 2 does not work.
        'excludes': ['pydoc', 'doctest', 'pdb', 'inspect', 'pyreadline',
            'locale', 'optparse', 'pickle', 'calendar']
        }

setup(windows=['main.py'], options={'py2exe':py2exe_options})