generating-python-installer
Commercial-grade Python installer expert for Windows: Nuitka extreme compilation, dist slimming, DLL footprint analysis, and Inno Setup packaging to ship the smallest, fastest installers. Use when a Python app must ship as a minimal, fast-starting Windows installer; not for basic script-to-exe conve
By affaan-m · 2,026 installs
npx skills add affaan-m/ecc --skill generating-python-installer
Source repository · Upstream listing
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
dist folder 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
1. Confirm build parameters — app name, version, publisher, exe name, source/output dirs, icon. Never auto fill; ask the user.
2. Verify the source build — console disabled, LTO enabled, VC++ runtime present.
3. Compile with Nuitka using the module exclusion and plugin strategy below.
4. Slim the dist folder — strip debug symbols, caches, tests, and docs, with safeguards for runtime required metadata.
5. Analyze DLLs to find and trim the largest dependencies.
6. 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 , drop opengl32sw , apply dist slimming.
"安装后在纯净系统打不开" → 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
关键优化策略
1. PASS: 使用 32 位 Python → 体积减少 20 30%
2. PASS: base library.zip 压缩标准库 → 0.74 MB
3. PASS: 精简模块排除 → 无 pytest/unittest/setuptools
4. PASS: 精简 Qt 插件 → 只保留必要插件
体积分布
组件 体积 占比 优化建议
playwright 76.74 MB 23.8% 非必要可移除
OpenCV 62.38 MB 19.3% 用 opencv python headless
PySide2 22.52 MB 7.0% 排除 WebEngine/3D/Charts
其他依赖 161.36 MB 49.9%
预期效果对比
项目类型 Nuitka 原始 优化后 参考项目实测
Tkinter + 标准库 150 250 MB 80 120 MB
PyQt/PySide 200 400 MB 120 250 MB 323 MB (含 OpenCV 等)
含 numpy/pandas 300 600 MB 180 350 MB
核心工作流 (Workflow) WARNING: 严格执行
当用户请求打包时,按照以下步骤操作:
步骤 1:强制参数确认(FAIL: 禁止使用默认值)
WARNING: 重要规则:以下所有参数必须逐一向用户确认,禁止自动填充或使用默认值!
必须向用户询问并确认以下信息( 等待用户明确回复后才能继续 ):
参数 说明 示例
软件名称 (App Name) 软件显示名称 红墨批注
版本号 (Version) 语义化版本号 1.0.0
发布者/公司名 (Publisher) 控制面板显示的发布者 YourCompany
主程序 (Exe Name) 主可执行文件名 RedInk.exe
源路径 (Source Dir) Nuitka dist 文件夹绝对路径 D:\project\dist
输出路径 (Output Dir) 安装包生成位置 D:\project\output
图标路径 (Icon Path) .ico 文件绝对路径(可选但推荐) D:\project\icon.ico
官网地址 (URL) 可选,用于控制面板链接 https://example.com
询问模板:
"请提供以下打包参数,我需要您逐一确认:
1. 软件名称:
2. 版本号:
3. 发布者/公司名:
4. 主程序文件名(如 xxx.exe):
5. 源路径(Nuitka dist 文件夹):
6. 输出路径(安装包保存位置):
7. 图标路径(.ico 文件,可留空):
8. 官网地址(可留空):
请逐一填写,或回复"跳过"表示使用空值。"
步骤 2:源文件质量与编译检查(关键)
在生成代码之前,必须向用户发出以下 关键确认 (因为 Inno Setup 只是打包工具,无法改变程序本身的运行属性):
"WARNING: 编译参数检查 :
1. 去黑窗 :请确认您的 dist 文件夹是使用 nuitka windows console mode=disable 编译的。(否则安装后依然会有黑框)
2. 高性能 :请确认是否使用了 lto=yes 。(否则启动速度可能不理想)
3. 运行库 :请确保 dist 文件夹内已包含必要的 VC++ 运行库,防止在纯净系统上无法运行。
确认源文件已准备好请回复"确认",否则请先重新编译。 "
步骤 3:生成代码
用户确认后,输出包含 完整元数据 和 卸载图标修复 的代码。
Nuitka 极限优化编译(基于 参考项目经验)
一、32 位 vs 64 位选择策略
参考项目使用 32 位 Python 的原因 :
组件 64位体积 32位体积 节省
python3x.dll ~4.5 MB ~3.8 MB 15%
Qt5Core.dll ~8 MB ~5 MB 37%
numpy ~30 MB ~20 MB 33%
总体 基准 20~30%
推荐使用 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 脚本中添加:
下载地址:[Microsoft Visual C++ Redistributable](https://learn.microsoft.com/en us/cpp/windows/latest supported vc redist)
Inno Setup 脚本模板(商业终极版)
占位符说明
占位符 说明 示例值
{{APP NAME}} 软件显示名称 红墨批注
{{APP VERSION}} 版本号 1.0.0
{{PUBLISHER}} 发布者/公司名 MyCompany
{{APP URL}} 官网地址 https://example.com
{{EXE NAME}} 主程序文件名 RedInk.exe
{{SOURCE DIR}} Nuitka dist 文件夹路径 D:\project\dist\RedInk.dist
{{OUTPUT DIR}} 安装包输出路径 D:\project\output
{{ICON PATH}} 图标文件路径 D:\project\icon.ico
{{GENERATE RANDOM GUID}} 需生成唯一GUID 使用 Inno Setup "Tools Generate GUID"
常见问题 (FAQ)
Q1: 安装后双击程序无反应?
1. 打开 CMD,手动运行 exe 查看错误信息
2. 检查是否缺少 VC++ 运行库
3. 检查 Nuitka 编译是否成功
Q2: 安装包体积过大?
优化方法 :
1. 使用 32 位 Python 编译(节省 20 30%)
2. 应用 参考项目的模块排除清单
3. 启用 Anti Bloat 插件
4. 执行 dist 文件夹瘦身脚本
5. 分析 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] 中排除它。
优化效果预期
优化组合 体积减少 启动提升 风险等级
基础编译 基准 基准 无
+ lto=yes 5 10% 10 20% PASS: 无
+ anti bloat 15 25% PASS: 无
+ 模块排除 20 35% 5% PASS: 无
+ dist 瘦身 25 40% PASS: 无
+ 32 位编译 40 60% PASS: 无
全部组合 45 65% 15 25% PASS: 无风险
WARNING: 不建议使用 UPX 压缩 ,虽然能进一步减小体积,但极易触发杀毒软件误报。
基于 参考项目实战经验优化,助你打造商业级安装包!