news 2026/9/29 22:21:23

N.E.K.O.桌面版发布流程:Nuitka编译、代码签名与跨平台稳定版构建全解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
N.E.K.O.桌面版发布流程:Nuitka编译、代码签名与跨平台稳定版构建全解

N.E.K.O.桌面版发布流程:Nuitka编译、代码签名与跨平台稳定版构建全解

【免费下载链接】N.E.K.OA catgirl who lives with you in real time — reaching out first, sharing your media, and actually getting things done, powered by an embodied emotional engine.🐱❤️一只会主动找你玩的 AI 猫娘。项目地址: https://gitcode.com/gh_mirrors/ne/N.E.K.O

N.E.K.O. 是一只会主动找你玩的 AI 猫娘,它的桌面版要能稳定运行,离不开一条完整的发布流水线:Nuitka 编译生成独立后端、代码签名保证分发安全、跨平台构建覆盖 Windows / macOS / Linux。本文面向新手,用大白话讲清这套流程怎么运作、每个环节防住了什么坑,以及维护者如何产出一个可发布的稳定版。

先分清两类产物:Electron 前端 与 Nuitka 后端

理解 N.E.K.O. 桌面版,第一步是分清它由两部分组成:

  • Electron 前端(窗口、托盘、Steam 集成、更新器)——来自配套的 N.E.K.O.-PC 仓库
  • Python 后端(launcher.py入口的三服务架构)——由本仓库用 Nuitka 编译成projectneko_server独立可执行程序

只拿到 Python 后端可执行文件,是没有窗口、没有托盘、没有更新器的;反之亦然。这条区分在整个发布文档里被反复强调,见 docs/deployment/windows-exe.md。

产物构建方式内容用途
桌面版Electron 前端 + Nuitka 后端打包窗口、托盘、更新器、完整服务正式分发(Steam / Releases)
纯后端Nuitka standalone 单独编译仅projectneko_server集成测试 / 自托管
Nightly 测试版定时任务自动构建未签名、会被覆盖尝鲜测试,非稳定渠道

Nuitka 编译:把 Python 项目冻成独立可执行程序

为什么选 Nuitka 而不是直接跑源码

Nuitka 会把 Python 代码直接编译成本机机器码,连同依赖库、数据文件一起打成一个目录(standalone 模式),用户无需安装 Python 环境即可运行。对 N.E.K.O. 这种带音频模型、Live2D 模型、大量静态资源的项目,"打包清单"就是编译阶段的核心工作。

内置插件的三级暂存策略

N.E.K.O. 自带 90 多个内置插件,每个插件的数据文件(plugin.toml、配置、前端页面)都不能漏。编译时遵循的固定顺序记录在 docs/contributing/nuitka-packaging.md:

  1. 运行 scripts/prepare_nuitka_plugins.py 的prepare命令,按各插件的[tool.neko.build]规则生成精确的排除清单
  2. 编译 Nuitka 启动器,产出dist目录
  3. 再用install命令把插件"装进"构建好的发行目录
  4. 最后跑一次完整性校验

这种"先编译、再装配插件"的方式,避免了把整个插件目录无脑塞进包里的粗放做法——文档明确警告不要恢复--include-data-dir=plugin/plugins这类一刀切写法,因为它会绕过暂存契约。

离线模型资产:编译前必须先备好

桌面版内置了向量记忆、语音端点检测、说话人识别等本地模型(onnx 权重文件)。这些权重不入库、运行时也不允许联网下载,因此必须在 Nuitka 编译前用 scripts/prepare_embedding_model.py 等脚本下载到位,随后打进发行包。

用静态检查代替盲目启动

打包后的启动器会拉起多个子服务,直接启动容易留下"看起来能跑、实际缺文件"的半成品。项目因此把静态完整性检查放在签名之前:

uv run python scripts/check_nuitka_dist.py dist/Xiao8 --plugin-stage build/nuitka-plugins

scripts/check_nuitka_dist.py 维护了一份"关键资产清单",逐项断言发行包里必须存在的东西,例如:

  • 主入口projectneko_server.exe与config/、static/、templates/三大目录
  • 内置 Live2D 模型的.moc3与 4096 分辨率纹理(只查model3.json挡不住半截解包)
  • 向量记忆模型的model_quantized.onnx具体权重文件(目录非空还不够,下载中断会留下空壳目录)
  • 每个内置插件目录下必须有plugin.toml,否则运行时插件扫描结果为 0

它专门拦截三类历史事故:Nuitka 把数据目录里的.py当代码过滤掉、文件锁导致dist目录残留嵌套形成"能启动但缺 config/static"的半坏包、插件丢失plugin.toml。检查不通过就退出码非零,签名与 Electron 打包步骤不会执行。

代码签名:让稳定版可被用户与更新器信任

两级签名体系

稳定版发布采用"原生构建主机"策略:不在云端打 tag 触发构建,而是在 Windows / macOS / Linux 各自的构建机上原生编译、原生签名。签名分两级:

  • 可执行文件签名:Windows 用代码签名证书、macOS 用开发者证书,由 scripts/build-desktop-release.ps1 调用本地可用的签名身份完成
  • Portable 更新清单签名:用 Ed25519 密钥对更新 manifest 签名,产出配套的.sig文件,防止更新内容被篡改

发布脚本的关键参数示例(macOS arm64 架构):

./scripts/build-desktop-release.ps1 -Version 0.8.4 ` -Platform macos -Architecture arm64 ` -ManifestSigningKeyPath /secure/portable-manifest-ed25519.pem ` -PreviousReleaseTag v0.8.3

脚本还复用姊妹仓库的 manifest 校验器(portable-update.js)做自校验。需要强调:签名脚本只负责签名与暂存,绝不创建 tag、上传 Release 或调用更新服务,发布动作由人工把关。

增量更新:更小的包,同样的可信

-PreviousReleaseTag参数会让脚本拉取上一版清单,当增量包比完整包更小时自动产出差分更新包——用户升级 0.8.3 → 0.8.4 时下载的体积显著变小,而信任链(manifest +.sig)保持不变。

跨平台稳定版构建:每个平台在原生主机上完成

全平台产物矩阵

一个稳定版发布必须凑齐以下全部产物(缺一项都不算合格发布):

平台完整包清单 + .sig
Windowsx64 Portable✅
macOSx64 / arm64 各一份✅
Linuxx64 tarball + x64 AppImage✅

每个平台都在对应架构的原生主机上执行 Nuitka 编译(macOS 需按 arm64 / x64 各跑一遍 PowerShell 并显式指定-Architecture),再用 scripts/check_dist_arch.py 核对产物架构与目标一致,杜绝"在 x64 机器上打出 arm64 空壳包"之类的错位。

发布资产:上传前的最后防线

所有原生构建收齐到release-assets/<version>/后,运行 scripts/publish-desktop-release-assets.ps1 完成上传。它在上传前做了四道校验:

  1. 暂存文件名与已发布 Release 逐一对应
  2. 每个 Portable manifest 都有匹配的.sig文件
  3. 已存在的 OSS 对象不可覆盖——重跑仅当 SHA-256 与暂存资产完全一致才放行
  4. 注册镜像前,把每个 CDN 资产下载回来与暂存文件比对 SHA-256

OSS 凭证只保存在本地 ossutil 配置中,从不进入仓库文件,这也是签名与发布流程安全设计的一部分。

新手速查:发布前检查清单

  • Nuitka 编译产物已通过check_nuitka_dist.py全部断言(含 Live2D 纹理、onnx 权重、插件plugin.toml)
  • 六个平台产物(Win x64 / mac x64+arm64 / Linux x64+AppImage)齐备
  • 每个 Portable manifest 都有对应.sig签名文件
  • 架构校验(check_dist_arch.py)通过
  • 发布前已在每台目标主机上实测签名身份可用
  • 记住:Nightly 测试包未签名且随时被覆盖,稳定分发只走正式发布渠道

延伸阅读

文档说明
docs/contributing/nuitka-packaging.mdNuitka 打包契约:插件暂存、数据包含规则、安全排障
docs/deployment/manual-desktop-release.md手动稳定版发布完整步骤(签名、上传、校验)
docs/deployment/windows-exe.mdWindows 产物构成与 Nightly 说明
scripts/check_nuitka_dist.py发行包完整性断言实现
specs/launcher.specPyInstaller 备选 spec,可对照理解打包数据清单的写法

这条"编译 → 静态校验 → 原生签名 → 跨平台收齐 → 哈希对账上传"的流水线,让 N.E.K.O. 桌面版在没有云端一键构建的情况下,依然能产出每个平台都签好名、每个文件都可验证的稳定发行版。

【免费下载链接】N.E.K.OA catgirl who lives with you in real time — reaching out first, sharing your media, and actually getting things done, powered by an embodied emotional engine.🐱❤️一只会主动找你玩的 AI 猫娘。项目地址: https://gitcode.com/gh_mirrors/ne/N.E.K.O

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/29 22:19:51

ERP 国产化替代的工程分解:三条路径、每阶段交付物与技术验收项

做 ERP 国产化替代的工程拆解&#xff0c;第一件事不是选产品&#xff0c;而是先定策略——因为策略直接决定后面的工程结构、交付物清单和排期方式。 把一套跑了十几年的国外 ERP 换掉&#xff0c;最难的通常不是技术&#xff0c;而是工程分解方式选错。网上能搜到的迁移指南大…

作者头像 李华
网站建设 2026/9/29 22:19:51

版权合规为底线,国内大模型训练数据服务商能力对比

随着大模型技术从通用走向垂直、从文本走向多模态&#xff0c;训练数据的质量与合规性已成为决定模型性能与商业落地安全的关键变量。然而&#xff0c;数据来源分散、授权边界模糊、格式不统一等问题长期困扰着AI研发团队。在这一背景下&#xff0c;选择一家具备版权合规能力的…

作者头像 李华
网站建设 2026/9/29 22:16:44

Hypit一行命令复刻爆款视频:AI风格迁移与结构对齐实操指南

1. 复刻爆款视频这件事&#xff0c;为什么值得交给你终端里的一行命令先把结论放在前面&#xff1a;我所说的"复刻"&#xff0c;不是逐帧抄袭、二创洗稿&#xff0c;而是指把一条爆款视频的结构、节奏、运镜风格和画面风格提取出来&#xff0c;作为生成条件&#xff…

作者头像 李华
网站建设 2026/9/29 22:16:23

Ubuntu用户与权限管理:从内核契约到生产级最小特权实践

1. 为什么“用户和权限管理”不是配置项&#xff0c;而是系统运行的底层契约在 Ubuntu 上敲下sudo apt update的那一刻&#xff0c;你其实已经站在了 Linux 权限模型的最前线——这个命令之所以能成功&#xff0c;不是因为终端“聪明”&#xff0c;而是因为你当前用户被写进了/…

作者头像 李华
网站建设 2026/9/29 22:16:07

20 嵌入式操作系统 | ubus:把自己的程序状态暴露出去

嵌入式操作系统 | ubus&#xff1a;把自己的程序状态暴露出去 本课程开源地址&#xff08;Gitee&#xff09;&#xff1a;https://gitee.com/fujianxinxi/qianrushixitongyingyongkaifa.git 课件、示例代码与验收脚本都在该仓库&#xff0c;可直接 git clone 或下载 ZIP 使用。…

作者头像 李华
网站建设 2026/9/29 22:13:52

大语言模型技术 step by step 第15章 提示工程与上下文学习

第15章 提示工程与上下文学习 学习目标 理解上下文学习&#xff08;ICL&#xff09;的原理与机制掌握少样本提示与思维链等提示技术理解指令遵循与提示敏感性了解提示工程的最佳实践前面几章讨论如何训练和对齐模型。本章转向如何使用模型。大模型有一个革命性特性&#xff1a;…

作者头像 李华