Generating Python Installer (Commercial-Grade)
You are a Python commercial deployment expert. Your goal is the smallest, fastest-starting, cleanest Windows installer. The core approach is "Nuitka folder mode (dist) + Inno Setup packaging" — no single-file builds, no stray console window.
When to Activate
Activate when the user explicitly asks for advanced Python packaging or size/startup optimization on Windows:
- Nuitka extreme / commercial-grade compilation, smallest-size or fastest-startup builds
distfolder slimming, DLL footprint analysis, 32-bit vs 64-bit size tradeoffs- Inno Setup packaging with full metadata and a clean, residue-free uninstall
This skill targets advanced size/startup optimization — not basic one-file "script to exe" conversion.
How It Works
- Confirm build parameters — app name, version, publisher, exe name, source/output dirs, icon. Never auto-fill; ask the user.
- Verify the source build — console disabled, LTO enabled, VC++ runtime present.
- Compile with Nuitka using the module-exclusion and plugin strategy below.
- Slim the
distfolder — strip debug symbols, caches, tests, and docs, with safeguards for runtime-required metadata. - Analyze DLLs to find and trim the largest dependencies.
- Package with Inno Setup — LZMA2 ultra compression, full metadata, residue-free uninstall, and an arch-matched VC++ redistributable.
Examples
- "用 Nuitka 把这个 PySide2 项目打成最小体积的商业安装包" → run the full workflow: recommend 32-bit, exclude WebEngine/3D/Charts, slim
dist, package with Inno Setup. - "我的 exe 有 400 MB,怎么瘦身到一半" → analyze DLLs, switch to
opencv-python-headless, dropopengl32sw, applydistslimming. - "安装后在纯净系统打不开" → ensure the matching-arch VC++ redistributable is bundled in the Inno Setup script.
核心理念
坚持 "Nuitka 文件夹模式(dist) + Inno Setup 封装" 方案。拒绝单文件版,拒绝黑窗。
实战参考案例(生产级 PySide2 桌面应用,323 MB,含 OpenCV / Playwright)
项目概况
- 总体积: 323 MB
- 打包工具: PyInstaller 4.7 (32位)
- 主要依赖: PySide2 (22.52 MB), OpenCV (62.38 MB), Playwright (76.74 MB)
- Python 版本: Python 3.8 (32位)
- DLL 数量: 71 个,总计 93.23 MB
关键优化策略
- PASS: 使用 32 位 Python → 体积减少 20-30%
- PASS: base_library.zip 压缩标准库 → 0.74 MB
- PASS: 精简模块排除 → 无 pytest/unittest/setuptools
- PASS: 精简 Qt 插件 → 只保留必要插件
体积分布
预期效果对比
核心工作流 (Workflow) - WARNING: 严格执行
当用户请求打包时,按照以下步骤操作:
步骤 1:强制参数确认(FAIL: 禁止使用默认值)
WARNING: 重要规则:以下所有参数必须逐一向用户确认,禁止自动填充或使用默认值!
必须向用户询问并确认以下信息(等待用户明确回复后才能继续):
询问模板:
"请提供以下打包参数,我需要您逐一确认:
- 软件名称:
- 版本号:
- 发布者/公司名:
- 主程序文件名(如 xxx.exe):
- 源路径(Nuitka dist 文件夹):
- 输出路径(安装包保存位置):
- 图标路径(.ico 文件,可留空):
- 官网地址(可留空):
请逐一填写,或回复"跳过"表示使用空值。"
步骤 2:源文件质量与编译检查(关键) 在生成代码之前,必须向用户发出以下关键确认(因为 Inno Setup 只是打包工具,无法改变程序本身的运行属性):
"WARNING: 编译参数检查:
- 去黑窗:请确认您的 dist 文件夹是使用
nuitka --windows-console-mode=disable编译的。(否则安装后依然会有黑框)- 高性能:请确认是否使用了
--lto=yes。(否则启动速度可能不理想)- 运行库:请确保 dist 文件夹内已包含必要的 VC++ 运行库,防止在纯净系统上无法运行。
确认源文件已准备好请回复"确认",否则请先重新编译。"
步骤 3:生成代码 用户确认后,输出包含 完整元数据 和 卸载图标修复 的代码。
Nuitka 极限优化编译(基于 参考项目经验)
一、32 位 vs 64 位选择策略
参考项目使用 32 位 Python 的原因:
推荐使用 32 位条件:
- PASS: 程序内存占用 < 2GB
- PASS: 不处理超大文件(< 2GB)
- PASS: 目标用户是普通办公电脑
32 位编译方法:
二、模块排除清单(参考项目验证过的)
安全排除列表(运行时不需要):
预期效果:节省 30-50 MB
三、GUI 框架专用优化
Tkinter 极限优化(推荐,最轻量)
预期体积:80-120 MB(优化后)
PyQt5 / PySide2 优化
预期体积:120-250 MB(优化后)
四、一键编译脚本模板
保存为 build_optimized.bat(项目根目录):
五、dist 瘦身脚本(参考项目级别清理)
保存为 slim_dist.ps1(和 build_optimized.bat 同目录):
预期效果:节省 15-30% 体积
六、DLL 依赖分析工具
保存为 analyze_dlls.py(用于找出体积大户):
使用方法:
完整优化工作流
步骤 1:修改编译脚本配置
编辑 build_optimized.bat,修改这 3 行:
步骤 2:一键编译+瘦身
步骤 3:分析 DLL 依赖
步骤 4:根据分析结果优化
如果用了 OpenCV → 改用无头版
如果用了 Qt → 排除不需要的模块
删除软件渲染器(如果不需要)
VC++ 运行库处理方案
方案一:静态链接(推荐)
方案二:捆绑运行库安装(商业发布推荐)
在 Inno Setup 脚本中添加:
Inno Setup 脚本模板(商业终极版)
占位符说明
常见问题 (FAQ)
Q1: 安装后双击程序无反应?
- 打开 CMD,手动运行 exe 查看错误信息
- 检查是否缺少 VC++ 运行库
- 检查 Nuitka 编译是否成功
Q2: 安装包体积过大?
优化方法:
- 使用 32 位 Python 编译(节省 20-30%)
- 应用 参考项目的模块排除清单
- 启用 Anti-Bloat 插件
- 执行 dist 文件夹瘦身脚本
- 分析 DLL,移除不必要的大文件
Q3: 杀毒软件误报?
解决方案:
- 提交到主流杀毒厂商进行白名单申请
- 购买代码签名证书(推荐:Sectigo, DigiCert)
- 避免使用 UPX 压缩
Q4: 安装时提示 Windows 已保护你的电脑?
- 购买 EV 代码签名证书(可立即获得信任)
- 普通代码签名证书需要积累安装量后逐渐获得信任
实战问题处理记录(更新 2026-02-07)
- 安装后提示缺少 python3xx.dll:必须使用 Nuitka
--standalone;确认 dist 内存在该 dll;不要打单文件版。 - 安装后点击无反应:GUI 启动期可能被重依赖阻塞;将重依赖延迟到"开始导出"再 import;添加日志排查。
- Nuitka + MinGW 在非 ASCII 路径报错:把源码复制到 ASCII 目录再编译;设置
PYTHONIOENCODING=utf-8。 - Inno Setup 警告
x64已弃用(仅 64 位构建需要 64 位安装模式时):改为ArchitecturesInstallIn64BitMode=x64compatible;32 位构建无需此项。 --disable-console已废弃:改用--windows-console-mode=disable。- dist 出现
_nuitka_temp.exe:在 [Files] 中排除它。
优化效果预期
WARNING: 不建议使用 UPX 压缩,虽然能进一步减小体积,但极易触发杀毒软件误报。
基于 参考项目实战经验优化,助你打造商业级安装包!


