ook*_*lah 7 python pyinstaller pyqt4
我正在尝试缩小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 )
Run Code Online (Sandbox Code Playgroud)
现在,我想开始排除事物,但是似乎没有关于如何排除事物的很好的解释。
这些是我在使用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'
Run Code Online (Sandbox Code Playgroud)
虽然如果我将这些添加到a.binaries作为
a.binaries -[('wx')],
Run Code Online (Sandbox Code Playgroud)
而是删除PyQt4.dll文件。其他情况也是如此。我不遵循这种逻辑。我至少会认为,如果首先找不到它们,它将跳过它们而不是删除其他内容。
py2exe使我一个26mb的文件+三个文件(exe,library.zip和w9xpopen.exe)pyInstaller使我一个11mb的文件和一个文件。
我觉得我可以把它缩小一些,但这不排除让我感到困惑的地方。它会直接忽略msv dll文件,并将它们放入。
使用Python 2.7,PyQt4 4.9.x
小智 6
我会删除一些这样的:
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)
])
Run Code Online (Sandbox Code Playgroud)
一种简单的排除方法是使用 Analysis 类,并将模块添加到排除字段,如此处所述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'], ..)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16600 次 |
| 最近记录: |