9

我正在尝试缩小我的 python exe 文件的大小,我一直在环顾四周,但似乎找不到删除额外模块的好答案。目前,我发现它正在删除我需要的模块,而不是我告诉它的模块。该文档相当无用,到目前为止我也没有找到示例。

我的规格文件:

a = Analysis(['D:\\<path>\\<scriptName>.py'],
         pathex=['c:\\bin\\pyinstaller-2.0'],
         hiddenimports=[],
         hookspath=None,
         )

pyz = PYZ(a.pure)
exe = EXE(pyz,
      a.zipfiles,
      a.scripts,
      a.binaries,
      a.datas + [('data/Sounds/Cycle.wav', 'D:\\<path>\\data\\Sounds\\Cycle.wav','DATA'),
       ('data/Sounds/Hold.wav', 'D:\\<path>\\data\\Sounds\\Hold.wav','DATA'),
       ('data/Sounds/Timer.wav', 'D:\\<path>\\data\\Sounds\\Timer.wav','DATA'),
       ('data/Sounds/Warn.wav', 'D:\\<path>\\data\\Sounds\\Warn.wav','DATA'),
       ],
      name=os.path.join('dist', 'timer.exe'),
      debug=False,
      strip=False,
      upx=False,
      icon=r"D:\<path>\Icon.ico",
      console=True )

现在,我想开始排除事物,但似乎没有关于如何排除事物的解释。

这些是我在使用 py2exe 时排除的:

'win32', 'unittest', _ssl, 'python25.dll', 'w9xpopen.exe', 'wx'
'python25.dll', 'API*', 'KERNALBASE.dll', 'DEVOBJ.dll','CRMGR32.dll',
'POWERPROF.dll', 'msvcm90.dll', 'msvcp90.dll', 'msvcr90.dll'

虽然如果我将其中任何一个添加到 a.binaries 中

a.binaries -[('wx')],

它会删除 PyQt4.dll 文件。其他人也是如此。我不遵循这个逻辑。我认为,至少,如果它首先找不到它们,它会跳过它们而不是删除其他东西。

py2exe 使我成为 26mb 文件 + 三个文件(exe、library.zip 和 w9xpopen.exe) pyInstaller 使我成为 11mb 文件和一个文件。

我觉得我可以把它变小,但这不包括让我感到困惑的事情。它直接忽略了 msv dll 文件并将它们放入其中。

使用 Python 2.7、PyQt4 4.9.x

4

3 回答 3

4

我会删除一些这样的:

a.binaries = a.binaries - TOC([
  ('sqlite3.dll', None, None),
  ('tcl85.dll', None, None),
  ('tk85.dll', None, None),
  ('_sqlite3', None, None),
  ('_ssl', None, None),
  ('_tkinter', None, None)
])
于 2017-11-07T06:09:38.537 回答
4

对我有用的解决方案是:

excluded_binaries = [
        'VCRUNTIME140.dll',
        'msvcp140.dll',
        'mfc140u.dll']
a.binaries = TOC([x for x in a.binaries if x[0] not in excluded_binaries])
于 2019-07-02T12:57:40.910 回答
4

一种简单的排除方法是使用 Analysis 类,并将您的模块添加到 excludes 字段中,如此处所述https://pyinstaller.readthedocs.io/en/stable/spec-files.html#spec-file-operation

我使用的是这样的:

Analysis(..., excludes=['_gtkagg', '_tkagg', 'bsddb', 'curses', 'pywin.debugger', 'pywin.debugger.dbgcon', 'pywin.dialogs', 'tcl', 'Tkconstants', 'Tkinter'], ..)
于 2017-02-15T12:25:51.607 回答