前面我们已经介绍过全新安装包 UI 的制作与预览方法。界面做好之后,接下来就是把打包环境准备好,将自己的程序文件放进去,真正生成可以安装和卸载的 Windows 安装包。
这篇文章从一台新电脑开始,依次准备 Python、Tkinter 和 Node.js,再以 leeqia_drink 喝水模板为例,介绍如何预览界面、如何通过脚本一键打包,以及如何使用可视化配置向导完成打包。
下面的操作都以完整的 nsNiuniuSkin Release 交付目录为基础。建议先完整解压,不要只复制其中的 SetupScripts 目录,也尽量不要放在层级过深或包含特殊字符的路径中。
一、准备 Python 3.10 或以上版本
nsNiuniuSkin 的打包脚本和可视化配置向导会使用 Python。请安装 Python 3.10 或以上版本,Windows 用户可以从 Python 官网下载安装:
安装时建议勾选安装器中的"Add Python to PATH"。如果安装时没有勾选,也可以在安装完成后手工配置环境变量。
1. 把 Python 和 pip 加入 PATH
需要加入 PATH 的通常是下面两个目录:
C:\Users\<用户名>\AppData\Local\Programs\Python\Python310\
C:\Users\<用户名>\AppData\Local\Programs\Python\Python310\Scripts\
第一行是 python.exe 所在目录,第二行是 pip.exe 所在目录。实际路径会随 Python 版本和安装位置变化,请以自己电脑中的文件位置为准。
在 Windows 中打开"系统属性 -> 高级 -> 环境变量",编辑用户变量或系统变量中的 Path,分别加入这两个目录。保存后要重新打开 PowerShell 或命令提示符,再执行:
python --version
python -m pip --version
两条命令都能正常显示版本,才说明 Python 与 pip 已经可以被打包脚本找到。推荐在后续命令中使用 python -m pip,这样可以确保 pip 与当前执行的 Python 属于同一套环境。
2. 已有 Conda 环境也可以直接使用
如果电脑上已经安装了 Anaconda 或 Miniconda,不一定要再安装一套独立 Python。可以新建或激活一个 Python 3.10 以上的环境,例如:
conda create -n nsniuniuskin python=3.10
conda activate nsniuniuskin
python --version
python -m pip --version
使用 Conda 时,每次打包前先激活对应环境即可。不要同时混用多个 Python 的 python.exe 和 pip.exe;如果排查版本问题,可以执行 where python 和 where pip,确认当前命令实际指向哪里。
3. 准备 Tkinter 可视化组件
可视化打包 UI 使用 Tkinter。按现有环境准备方式,可以先执行:
python -m pip install tk
需要注意,Tkinter 是 Python 的标准图形界面接口,Windows 官方 Python 安装包通常已经包含 Tcl/Tk 和 Tkinter。pip install tk 是否执行成功,不能代替实际验证。安装或确认完成后,请运行:
python -m tkinter
如果弹出一个 Tk 测试窗口,说明可视化配置向导需要的组件已经可用。如果提示缺少 _tkinter 或无法启动窗口,请重新运行 Python 官方安装器,选择"Modify",确认 Tcl/Tk 和 IDLE 组件已经安装,而不是只反复执行 pip 命令。
Tkinter 的官方说明也可以在这里查看:
二、准备 Node.js 22 或以上版本
drink 模板的界面使用新的 HTML、JavaScript UI 引擎,安装依赖和构建皮肤时需要 Node.js。请安装 Node.js 22 或以上版本;为了与当前 drink 模板保持一致,建议使用 22.22.0 或以上版本。
安装完成后重新打开 PowerShell,执行:
node --version
npm --version
能够分别看到 Node.js 与 npm 的版本号,说明环境准备完成。若系统中安装过多个 Node.js 版本,请用 where node 和 where npm 检查当前生效路径。
三、先预览 drink 安装包 UI
环境准备好以后,建议不要急着生成正式安装包,先把 drink 模板的安装和卸载流程预览一遍。这样可以提前检查页面、文案、按钮、动画和进度联动,修改 UI 时也不需要每次都完整打包。
drink 模板的欢迎页如下。左侧是鹈鹕喝水场景,右侧保留产品信息、快速安装、自定义选项和许可协议入口。

第一次使用时,在 Release 根目录打开 PowerShell,执行:
npm.cmd --prefix .\SetupScripts\leeqia_drink\skin ci
.\debugger\run.bat leeqia_drink
第一条命令安装界面依赖,首次使用或依赖清单更新后执行即可;第二条命令构建并打开预览。也可以直接双击:
SetupScripts\leeqia_drink\run_test.bat
预览环境不会真的向系统中安装或卸载文件,适合快速检查 UI。完整的页面切换、指定进度、卸载流程和失败场景调试方法,可以继续查看上一篇文章:
安装包UI美化之路-nsNiuniuSkin全新UI调试与预览方法
下面是 drink 模板从欢迎页进入安装过程的完整效果。安装开始后,水瓶中的水量会跟随进度变化。

预览只能检查界面和模拟流程,不能代替真实打包后的安装、覆盖安装与卸载测试。UI 确认无误后,再继续下面的打包步骤。
四、以 drink 为例一键打包
如果 drink 项目的产品信息、安装逻辑和输出名称已经配置好,最快的方法就是使用交付目录中的一键打包脚本。
打包前先完成三项检查:
- 把需要安装的程序文件放入 Release 根目录下的
FilesToInstall。 - 检查
SetupScripts\leeqia_drink\soft_setup.nsi中的产品名称、版本号、主程序名、默认安装目录和发布者信息。 - 正式打包时确认测试延时已关闭,并根据实际发布环境决定是否启用代码签名。
在 Release 根目录执行:
.\build-leeqia_drink.bat
也可以在资源管理器中直接双击 build-leeqia_drink.bat。脚本会准备 drink 皮肤资源与语言文件,处理待安装文件,调用 NSIS 编译,最终把安装包输出到:
Output\
输出文件名以脚本和当前项目配置为准。打包完成后不要只看控制台最后一行,还要进入 Output 检查文件是否确实生成,并确认文件时间与本次打包一致。
drink 安装进行中的界面如下。正式安装包中,除了检查动画和进度,还要验证文件写入、注册表、快捷方式、主程序启动和卸载清理是否符合预期。

如果打包脚本提示找不到 python、node 或 npm,先回到前两节检查 PATH 和当前终端中的版本,不要急着修改公共打包脚本。
五、以 drink 为例使用可视化 UI 打包
如果是第一次配置产品参数,或者不熟悉 package.py 的命令行参数,可以使用 nsNiuniuSkin 自带的可视化配置向导。在 Release 根目录执行或双击:
.\gui_package.bat
向导会使用 Tkinter 打开打包配置界面。下图是 leeqia_drink 模板已经载入配置后的实际界面:上方管理配置,中间设置打包控制参数和产品宏,底部可以保存脚本、生成安装包、运行安装包或预览 UI。

以 drink 为例,可以按下面的顺序操作:
- 在配置名称中填写
leeqia_drink_gui,点击"新建配置"。 - 在项目名称中填写
leeqia_drink,点击"从 nsi 导入默认值"。 - 选择打包模式。普通离线包一般选择 7z;快速本地测试也可以根据交付版本提供的选项选择 nozip。
- 检查是否签名、本地文件目录、源目录和卸载文件名。待安装文件默认放在
FilesToInstall。 - 填写产品名称、英文产品名称、版本号、主程序名、安装包名称、安装路径、注册表标识、发布者与版权信息。
- 点击"保存配置及脚本"。向导会保存当前配置,并生成对应的
generate_*.bat脚本,便于以后重复打包或接入自动化流程。 - 点击"生成安装包",等待脚本完成,然后到
Output目录检查结果。
下面的录屏同样以 leeqia_drink 为例,展示了启动可视化向导、载入 drink 项目参数并执行相关操作的过程。

可视化向导并没有绕开命令行打包流程,它会把界面中填写的参数转换为 Python 打包参数和批处理脚本。因此,第一次可以用向导理解和保存配置;后续版本发布时,可以直接运行生成的脚本,把版本号、待安装目录等少量变化接入自己的自动化流程。
六、打包完成后的检查
不论使用一键脚本还是可视化 UI,生成安装包后都建议至少检查下面几项:
- 安装包能否正常启动,产品名称、版本、图标和发布者是否正确。
- 欢迎页、许可协议、自定义安装、安装中、完成页是否完整显示。
- 安装目录、桌面快捷方式、开始菜单和开机启动选项是否符合配置。
- 主程序文件是否全部写入,安装完成后能否正常启动。
- 再次安装时能否正确识别旧版本或执行覆盖安装。
- 卸载流程是否完整,且不会删除安装目录之外的文件或需要保留的用户数据。
- 正式发布前是否已经完成安装包与卸载程序的代码签名。
到这里,从 Python、Tkinter、Node.js 环境准备,到 drink 模板预览、一键打包和可视化打包的流程就已经串起来了。环境只需要准备一次,项目配置也可以保存复用;以后更新程序文件和版本号,就能更快生成新的安装包。
愿天下没有难做的安装包!