我有一个简单的pandas pyinstaller exe,大小超过40MB。
我的exe示例:
import collections
import csv
import selenium
import pandas
print('hi')
对于这个来说,40MB+似乎有点过度杀伤。
我该如何尽可能地减少它呢?
一个方法:
pyinstaller --onefile --exclude matplotlib --exclude scipy --exclude pandas --exclude numpy.py
然而考虑到排除列表的长度,这不是实际可行的。
我该如何选择一个文件夹供pyinstaller获取模块并排除其他所有内容,以便我可以拥有一个小的应用程序?
规范文件:
a = Analysis(['123.py'],
pathex=['C:\\Users\\AA\\ZZ'],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
name='123',
debug=False,
strip=False,
upx=True,
runtime_tmpdir=None,
console=True )
值得一提的是,默认情况下,Pyinstaller无法检测到pandas。
补充:
hiddenimports = ['pandas._libs.tslibs.timedeltas']
To: C:\Users\<NAME>\AppData\Local\Programs\Python\Python36\Lib\site-packages\PyInstaller\hooks
在使用多个可执行文件时,一个可能的解决方案是将每个可执行文件链接到一个包含所有导入内容的单独文件夹或可执行文件。
pyinstaller --onefile test.py
(test.py 包含你的例子)时,我会得到一个大约 5MB 的可执行文件。 - John Andersonnumpy
可能正在使用 MKL,matplotlib
可能正在使用 Qt,这两者都可能导致非常大的可执行文件。请参见例如 https://stackoverflow.com/a/70113449、https://dev59.com/9KTja4cB1Zd3GeqPA2T9#67954011。 - djvg