You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyInstaller打包PySide2程序体积过大,能否精简后生成单文件或指定打包内容

PyInstaller打包PySide2 GUI应用体积过大解决方案

针对需求a:手动精简dist文件夹后生成单文件可执行程序

完全可以实现,操作步骤如下:

  1. 先以非--onefile模式正常打包,运行程序确认功能无误后,手动删除dist目录下所有确认不需要的PySide2组件(如QtBluetooth.dll、QtCharts.dll、QtQuick/QtQml相关的所有库、多余翻译文件等),再次启动主程序验证功能正常。
  2. 无需再次调用PyInstaller,直接使用7-Zip的自解压打包功能生成单文件:选中精简后dist目录内的所有文件,右键选择添加到压缩包,压缩格式选7z,勾选「创建自解压压缩包」,进入自解压设置界面,将解压路径设置为系统临时目录,启动程序项选择你的主exe文件,确认生成即可。最终生成的单文件体积会比原生PyInstaller onefile模式小30%以上。

针对需求b:打包时指定需要包含的PySide2内容

可以通过PyInstaller的排除规则直接实现,无需后续手动删文件,有两种常用配置方式:

方式1:打包命令直接加排除参数

在打包命令中通过--exclude-module参数逐个排除不需要的PySide2模块,示例命令如下:

pyinstaller --onefile --windowed --exclude-module PySide2.QtBluetooth --exclude-module PySide2.QtCharts --exclude-module PySide2.QtQuick --exclude-module PySide2.QtQml --exclude-module PySide2.QtMultimedia 你的脚本名.py

你可以根据自己的使用场景,把所有确定不需要的Qt模块都加入排除列表即可。

方式2:通过spec文件配置(适合多排除项场景)

  1. 先生成spec配置文件:运行pyi-makespec --onefile --windowed 你的脚本名.py
  2. 打开生成的.spec文件,找到excludes参数对应的列表,把所有不需要的PySide2模块都添加到列表中,示例:
a = Analysis(
    ['你的脚本名.py'],
    pathex=[],
    binaries=[],
    datas=[],
    hiddenimports=[],
    hookspath=[],
    hooksconfig={},
    runtime_hooks=[],
    excludes=['PySide2.QtBluetooth', 'PySide2.QtCharts', 'PySide2.QtQuick', 'PySide2.QtQml', 'PySide2.QtMultimedia'],
    win_no_prefer_redirects=False,
    win_private_assemblies=False,
    cipher=block_cipher,
    noarchive=False,
)
  1. 保存后运行pyinstaller 你的脚本名.spec即可完成打包。

额外优化建议

如果还需要进一步压小体积,可以添加UPX压缩支持:下载UPX工具解压到本地后,在打包命令中添加--upx-dir UPX所在目录路径参数,通常可以再压缩20%-30%的体积。

注意:每次修改打包规则后,都需要删除旧的build、dist文件夹和spec文件,避免缓存导致排除规则不生效。


内容的提问来源于stack exchange,提问作者Caterpillaraoz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 05:39:03