PyInstaller重打包与取证SOP

SKILL开发
开发 未标注权限 许可证不明确
安装这个技能

面向 Python 桌面程序的 PyInstaller 重打包与取证:处理旧 dist 目录冲突导致的构建失败、把源数据目录逐字节同步到产物 _internal、并校验打包产物与源码的一致性。适用于缺少安装包工具链(如无 NSIS / Inno Setup)时纯 PyInstaller 交付的场景。触发词:重打包、PyInstaller、COLLECT 失败、dist 同步、打包取证。

一句话选型结论

按资料字段整理

PyInstaller重打包与取证SOP是开发类的 Agent Skill,安装方式未标注,权限级别未标注,许可证不明确,有可直接复制的安装命令。技能本质是给模型读的说明书,效果取决于模型与客户端;装完先用一个小任务验证,再放进正式流程。

分类开发 安装方式未标注 权限级别未标注权限 许可证许可证不明确
累计安装 未标注 本周 未标注
GitHub 星标 未标注 仓库 未标注
下载量 未标注 技能市场下载数
权限级别 未标注权限 安装前请确认风险范围
许可证 许可证不明确 未说明

安装

未标注
在支持 Skills 的客户端里执行,装完问一句「你有哪些技能」验证
skillhub install user_6f47e228/pyinstaller-sop
  1. 1
    确认客户端支持

    确认你的客户端支持 Skills(Claude、Codex、Cursor 等),并升级到较新的版本。

  2. 2
    拿到技能文件

    执行上面的命令安装;也可以把仓库里的 SKILL.md 手动放进客户端的 skills 目录。

  3. 3
    刷新技能列表

    重新打开客户端,或刷新技能列表,让新放进来的技能被加载。

  4. 4
    验证是否生效

    问一句「你有哪些技能」,确认列表里出现它,再拿一个小任务试跑。

技能档案

开发
字段来自技能仓库与公开索引,中文说明由本站标注
作者 / 维护方user_6f47e228仓库 未标注 · 版本 未标注
宿主客户端未标注技能可被这些客户端加载
安装方式未标注安装包 community
权限级别未标注权限安装前请确认风险范围
许可证未说明许可证不明确,商用前请自行确认条款
仓库可用性available技能仓库当前是否可访问
最近核验2026-11-06上游最后核验时间 · 数据更新 2026-11-06
正文体量6.4 KBSKILL.md 原文大小,越大说明说明书写得越细

典型使用场景

3 类
按分类整理的常见用法,具体以 SKILL.md 为准
写代码与改 bug

按需求补代码、定位并修掉报错。

读仓库与生成改动

让模型读懂项目结构,再给出可落地的改动。

跑测试与排查故障

按现象排查问题,补测试用例并复跑。

选择建议

装之前先看这几条
按条目字段给出的判断,不替你决定用不用

值得选的地方

  • 有可直接复制的安装命令,不用自己翻文档找入口。

先想清楚的地方

  • 没有标注权限级别,实际能做什么要装好后确认。
  • 许可证不明确,商用或二次分发前先到仓库确认条款。
  • 没有做站内核验,内容以作者仓库为准。
  • 技能只是说明书,实际效果取决于模型与客户端,装完先用小任务试一遍。

更适合

  • 需要在开发场景里给模型补一套做法的人。
  • 愿意先读一遍 SKILL.md、确认它会让模型做什么的人。

不太适合

  • 对许可证要求很严、必须明确可商用的人。
  • 只想装完就自动变强、不打算看说明书的人。

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
技能权限级别安装方式累计安装宿主客户端安装命令
PyInstaller重打包与取证SOP当前 未标注权限 未标注 未标注 未标注 有
技能审查员 浏览器控制 ClawHub 市场 877.9 万 OpenClaw 有
Vercel React 最佳实践 浏览器控制 GitHub 仓库 849.1 万 Codex、Claude、Cursor 有
GitHub 代码协作 联网访问 ClawHub 市场 763.3 万 OpenClaw 有
网页设计指南 联网访问 GitHub 仓库 668.6 万 Codex、Claude、Cursor 有
本体论 只读 ClawHub 市场 663.7 万 OpenClaw 有

SKILL.md 全文

6.4 KB
模型实际读到的说明书原文,来自技能仓库

技能|PyInstaller打包与取证SOP

> 来源:<知识库系统>多次重建 exe,以及本次(2026-10-03)突破「无 NSIS 安装包」阻塞的实战。
> 起因:改了 app.py 却仍在跑旧 exe ⇒ "改了没生效";本机无 NSIS/Inno、精简 Python 的 msilib 被移除 ⇒ 安装包长期阻塞。

适用场景

单文件/少量文件的 Python 桌面应用(PyInstaller + pywebview 壳)需要重打包、验证产物含新代码、并产出可双击安装的安装包。
不适用:脚本类小工具、容器化部署、需系统级安装(写服务/驱动)的正式分发(敏感环境不联网,NSIS/Inno 不可用)。

触发词

打包、重打包、PyInstaller、COLLECT 被拦、打的 exe 没跟上源码、为什么改了没生效、dist 快照清理、--distpath、.spec 入口、哪些文件要打包、隔离端口取证、_verify_frozen、exe 起来几秒就退出、安装包、自解压安装器、无 NSIS 怎么打安装包、makensis 没有、msilib

操作步骤

  1. 先判断"要不要重打包":看 .spec 的 Analysis([...]) 入口。被 import 链追踪到的(如 app.py 由壳 kb_desktop.pyw import)⇒ 改了必须重打包;独立进程由计划任务跑源码的(如看门狗 kb_watchdog.pyw)⇒ 改了不用打包。

  2. 移走旧 dist(不直接删):mv dist/&lt;产品&gt; dist/_prev_&lt;日期&gt;。沙箱会拦 COLLECT 整目录删除且先删一半 ⇒ dist 半残。

  3. 全新 distpath 打包:python -m PyInstaller &lt;产品&gt;.spec --distpath dist/_build_&lt;日期&gt;,打完确认齐全再 mv 回 dist/&lt;产品&gt;。大 payload 加 --noupx(避免 UPX 内存风险)。

  4. 隔离端口取证:KB_PORT=8799 起 exe,启动后 0.4s 轮询抢窗口(exe 约 18s 自退)。拉渲染后 HTML 逐条断言新特征串在、旧文案不在、版本号对。取证报告落文件。

  5. 回收旧快照:确认新包可用后移 _prev_* 到 .trash(不可逆删除走 .trash;本机回收站失效,勿用 SHFileOperationW 假删)。

  6. 交付一致性铁律(最关键):凡是改了被追踪的源码 ⇒ 必须 重打包 dist → 同步 PC客户端 → 递增版本重建安装包 三步全做,否则用户装到的仍是旧客户端。验收标准:部署自测时,安装包释放出的 exe 大小与 dist 内 exe 大小完全一致。

  7. 无编译器依赖的自解压安装器(替代 NSIS/Inno):本机无 makensis/ISCC,且精简 Python 的 msilib 被移除、tkinter/7z 不可用 ⇒ 用 PyInstaller 把「安装逻辑 + 全部资源」打成一个 onefile exe,双击即自解压部署。
    - 安装逻辑零 GUI 框架:用 ctypes 直接调 user32.MessageBoxW / shell32.SHBrowseForFolderW 做向导(不需要 tkinter/webview),避免额外依赖。
    - 无人值守:支持 --silent(隐含无弹窗纯部署)/ --dir X(指定目录)/ --nogui;交互模式才弹窗。无显示器/无桌面会话时绝不可弹 MessageBoxW(会挂起数分钟)——用 --silent 或 headless 自测。
    - 防自我嵌套(必做):构建前先把旧安装包 exe 从 payload 源目录移出,打完再放回;否则每版都把上一版打进新包,体积指数膨胀(73→153→230MB 实测)。同理清理运行时产物(webview_profile 缓存 39MB、启动日志)不进包。
    - 版本递增不覆盖:产物名带版本号 &lt;知识库系统&gt;安装包_vX.Y.exe,新版本另起文件名,旧版移 .trash;构建脚本里的 INSTALLER_NAME 与输出 dst 路径必须同步改,否则会"版本号升了却覆盖旧文件"。
    - 部署自测:安装包.exe --silent --dir &lt;临时目录&gt;,验证文件数/exe 大小/壳脚本/卸载 bat 齐全,安装日志复制完整。

注意边界

  • 打包前必须 py_compile;改过内联 JS 还要 node --check。
  • 敏感项目:exe 只绑 <本机地址>,打包不引入任何联网依赖。
  • 安装器 exe 用 --noupx;onefile 首次运行会解压到临时目录(慢几秒),属正常。
  • ctypes 调 Win32 API 仅在 Windows 生效;跨平台需另写分支(本环境只 Windows)。

反例避雷

反例 为什么错 正确做法
改完源码不重打包就验证 日常跑旧二进制,验证全假 看 .spec Analysis 入口判断是否被追踪
让 PyInstaller 直接 COLLECT 到旧 dist 批量删被拦且先删一半,dist 半残 旧目录改名 _prev_&lt;日期&gt; + --distpath 全新目录
取证起完 exe 先睡 5 秒 exe 约 18s 自退、窗口短 启动后立刻 0.4s 轮询
取证用日常端口 8765 抢端口/被看门狗干扰 隔离端口 KB_PORT=8799
装了新功能只重打包不重打安装包 用户装的仍是缺功能的旧客户端 重打包→同步PC客户端→递增版本重打安装包,部署自测 exe 大小一致
安装包构建不排旧包 旧包被当 payload 递归,体积膨胀/内容错 构建前移出旧安装包,打完放回
无人值守场景弹 MessageBoxW 无桌面会话会挂起数分钟 --silent 无弹窗;headless 用 --nogui 自测
安装器含 webview_profile/日志 缓存 39MB 进包,包臃肿且泄漏运行时状态 打包前清理运行时产物

常见问题

5 问
答案由本站依据条目字段整理
PyInstaller重打包与取证SOP怎么安装?

在支持 Skills 的客户端里执行:skillhub install user_6f47e228/pyinstaller-sop。安装方式为未标注。装完刷新技能列表或重开客户端。

PyInstaller重打包与取证SOP支持哪些客户端?

资料没有标注宿主客户端,但只要客户端支持 Skills(Claude、Codex、Cursor 等),一般都能加载。

PyInstaller重打包与取证SOP权限高吗,安全吗?

权限级别为未标注权限。安装前先看它会读取或写入哪些内容。

PyInstaller重打包与取证SOP收费吗?

本站不代收费用,也没有标注具体价格。是否收费取决于技能本身和所用的模型或客户端,正式使用前按作者说明确认。

PyInstaller重打包与取证SOP用什么许可证?

许可证标注为 未说明(许可证不明确)。商用或二次分发前请到仓库确认条款原文。

热门专题

按场景挑技能
全部专题 →

技能内容以作者仓库为准;分类、权限级别与许可证状态的中文说明为中文整理,最近核验 2026-11-06。