代码之家  ›  专栏  ›  技术社区  ›  Siwel

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

  •  3
  • Siwel  · 技术社区  · 10 年前

    我有一个目前依赖于 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
    
    1 回复  |  直到 10 年前
        1
  •  4
  •   Siwel    10 年前

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

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

    更新
    现在,通过更改我的py2exe选项,我的发行版已降至28MB setup.py 剧本

    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})