RimSort 开发环境搭建与构建指南:从源码运行到跨平台二进制打包

发布时间:2026/10/4 11:18:42
RimSort 开发环境搭建与构建指南:从源码运行到跨平台二进制打包 桌面应用游戏开发CLI【免费下载链接】RimSortRimSort is an open source mod manager for the video game RimWorld. There is support for Linux, Mac, and Windows, built from the ground up to be a reliable, community-managed alternative to RimPy Mod Manager.项目地址https://gitcode.com/gh_mirrors/ri/RimSort点击查看免费下载本指南以 docs/development-guide/development-setup.md 为骨架结合仓库内的 justfile、pyproject.toml、distribute.py 与入口源码系统讲解 RimSort 的本地开发环境配置、源码运行、Dev 模式数据隔离以及借助 uv Nuitka distribute.py产出 Windows / macOS / Linux 可分发二进制的完整流程。读完本文你将能够独立完成从克隆仓库到运行、调试、测试、打包的全链路操作并理解每一步背后的实现原理。一、技术栈总览RimSort 是如何构建的RimSort 是一款面向 RimWorld 的开源跨平台 Mod 管理器支持 Linux、macOS、Windows其开发构建链路由以下关键组件组成编程语言与 GUI使用 Python 编写图形界面基于 PySide6Qt for Python实现仓库内app/views/目录下的main_window.py、mods_panel.py、settings_dialog.py等即为其视图层。项目与依赖管理使用 uvPython 包与项目管理器管理解释器、虚拟环境与依赖分组配置见 pyproject.toml。requires-python 3.12.*严格锁定 Python 3.12。任务运行器使用 just 将常用开发命令环境搭建、测试、检查、构建、i18n封装为统一配方见仓库根目录的 justfile。编译打包使用 Nuitka 头部与 rimsort.nuitka-package.config.yml。Steam 生态集成通过两个 git 子模块接入 Steam 相关能力——submodules/steamfiles解析 Steam 客户端的 acf/appinfo/manifest 信息与submodules/SteamworksPy通过 Steamworks API 与本地 Steam 客户端交互例如在 RimSort 内订阅/取消订阅创意工坊 Mod。由于部分依赖尤其是 SteamworksPy 原生库与 todds 纹理优化器需要特殊处理官方提供了自动化构建脚本 distribute.py这也是下文重点讲解的内容。二、前置条件操作系统与工具链2.1 操作系统RimSort 支持 Windows、macOS 与 Linux。官方发布构建所基于的 CI 运行环境也是验证过的基线为平台CI 运行环境Linuxubuntu-22.04、ubuntu-24.04macOSmacos-15-intelx86_64、macos-latestarmWindowswindows-latest需要注意你的操作系统必须是 PySide6 支持的平台Linux 发行版上 Ubuntu 是官方基线其他发行版理论上可用但未经官方验证。2.2 必备工具必需软件git —— 拉取仓库与子模块Python 3.12—— 可用 uv 自动安装uv python install 3.12uv —— 依赖与虚拟环境管理just —— 开发命令的任务运行器。代码质量检查工具just check与 CI 使用Node.js / npx—— 运行 JSCPD 复制粘贴代码检测just jscpdshfmt—— shell 脚本格式化just shfmt。Python 侧的 linterruff、mypy、pyright无需手动安装——uv sync会按 pyproject.toml 的[dependency-groups]自动安装。2.3 克隆仓库含子模块RimSort 依赖托管在其他仓库的子模块克隆时必须使用--recurse-submodulesgit clone --recurse-submodules -j8 https://github.com/RimSort/RimSort-j8让 git 并行拉取子模块以加速。如果克隆时忘记带该参数或需要更新子模块执行git submodule update --init --recursive这条命令也是 justfile 中submodules-init配方的实际内容just dev-setup会自动先执行它。三、环境搭建两条路径殊途同归3.1 推荐方式一条命令搞定在仓库根目录执行just dev-setup该配方见 justfile 第 199-201 行依次完成先执行git submodule update --init --recursive确保子模块就绪再执行uv sync --locked --dev --group build安装全部运行时、开发与构建依赖含 ruff、mypy 等 linter最后运行just i18n-compile将locales/*.ts编译为应用加载所需的locales/*.qm。3.2 手动方式如果你希望分步执行uv sync --dev # 安装运行时 开发依赖linter、测试工具 uv sync --group build # 额外安装构建依赖nuitka 等uv sync会自动创建/复用.venv虚拟环境。从 pyproject.toml 可以看到依赖分组的设计[project].dependencies是运行时依赖PySide6 6.11.2、loguru、aiohttp、networkx、pygit2、steamfiles 等[dependency-groups].dev是测试与静态检查工具pytest、pytest-qt、pytest-xvfb、mypy、pyright、ruff[dependency-groups].build则只包含nuitka4.2.2。3.3 安装共享 git hooks环境就绪后建议安装共享 git hooks让just check在每次 commit 前自动运行just install-hooks该配方执行git config core.hooksPath .githooks将提交前的质量门禁指向仓库内的.githooks目录。四、从源码运行 RimSort完成环境搭建后从项目根目录运行uv run python -m app入口文件为 app/main.py。该入口在初始化 GUI 前做了几件值得了解的事CLI 模式分流当首个参数为build-db、--help、--version时直接导入 app/cli/main.py 的cli()并退出不启动任何 Qt 组件--steamcmd-helper以runpy方式在当前进程内运行辅助脚本而不启动完整 GUIWindows 编译态下还会将标准流映射到活动控制台单实例锁通过 app/utils/single_instance.py 的SingleInstanceLock防止多实例并发运行锁文件位于应用数据目录下的rimsort.lock异常兜底通过sys.excepthook捕获主循环未处理异常并弹出致命错误对话框。五、Dev 模式隔离开发数据与生产数据5.1 为什么需要 Dev 模式从源码运行 RimSort 时如果直接使用生产数据目录开发过程中的调试、误操作可能污染你日常使用的配置。RimSort 为此内置了dev mode它将所有用户数据设置、日志、数据库、Mod 列表、主题、备份重定向到仓库根目录下的dev/子目录。5.2 激活方式uv run python -m app --dev从源码看--dev标志的处理发生在 app/main.py 第 96-98 行——任何其他初始化之前将RIMSORT_DEV环境变量置为1随后 app/utils/app_info.py 的_resolve_dev_mode()会解析该变量。5.3 Dev 模式下发生了什么设置文件保存在dev/data/settings.json日志写入dev/logs/数据库dbs/、Mod 列表modlists/、备份backups/均位于dev/data/之下默认启用 Debug 级日志见 app/main.py 第 202-207 行dev 模式强制DEBUG_MODE True生产模式则依赖数据目录中是否存在名为DEBUG的文件窗口标题显示[DEV]后缀见 app/views/main_window.py 第 391 行的AppInfo().is_dev_mode分支。dev/目录已被写入.gitignore不会被提交。5.4 环境变量覆盖Dev 模式也可以通过环境变量控制优先级与取值如下实现见 app/utils/app_info.py 第 36-56 行变量取值效果RIMSORT_DEV1、true强制开启 dev 模式等价于--devRIMSORT_DEV0、false强制关闭 dev 模式可覆盖--devRIMSORT_DEV_DIR绝对路径覆盖 dev 数据根目录仅在 dev 模式激活时生效使用自定义 dev 数据目录RIMSORT_DEV_DIR/tmp/rimsort-test uv run python -m app --dev或仅通过环境变量不带--devRIMSORT_DEV1 RIMSORT_DEV_DIR/tmp/rimsort-test uv run python -m app仓库中 tests/utils/test_app_info_dev_mode.py 对该行为做了完整覆盖包括合法值解析、非法值告警与RIMSORT_DEV_DIR覆盖逻辑可作为理解实现细节的参考。六、SteamworksPy最需要特殊处理的依赖RimSort 的实际运行需要三层 Steamworks 相关文件仓库根目录libs/下已预置SteamworksPy Python 模块子模块内位于submodules/SteamworksPy/library编译后的 SteamworksPy 原生库——Linux 下为SteamworksPy_arch.somacOS 下为SteamworksPy_arch.dylibWindows 下为SteamworksPy64.dllSteamworks SDK 的可再分发二进制——libsteam_api.so/libsteam_api.dylib/steam_api64.dll及静态库steam_api.lib等见 libs/ 目录。6.1 使用预编译二进制推荐发布维护者会在仓库与各平台 release 中提供预编译产物。源码环境下你需要将架构匹配的二进制重命名到位Linux将SteamworksPy_*.so*为你的 CPU 架构复制为SteamworksPy.somacOS将SteamworksPy_*.dylib复制为SteamworksPy.dylib。源码模式下这些库的查找路径由 app/utils/app_info.py 的libs_folder属性决定非编译态返回application_folder / libsNuitka 编译态则直接使用可执行文件所在目录macOS 为.app包内Contents/MacOS/。6.2 从源码构建 SteamworksPy可选注意截至文档撰写时SteamworksPy 模块仅能用Python 11构建与 RimSort 自身要求的 Python 3.12 不同你可能需要独立的 Python 环境。cd SteamworksPy pip install -r requirements.txt各平台编译要求Linux需要gUbuntu 开箱即用macOS需要 Xcode Command Line Tools可直接用脚本编译无需完整 XcodeWindows需要 Visual Studio 2022 与 Build Tools安装时选择 Desktop development with C 工作负载或直接安装 VS Community 2022 标准负载。随后可调用distribute.py中的构建函数一键完成 SDK 下载、头文件/库文件拷贝与原生库编译python -c from distribute import build_steamworkspy; build_steamworkspy()在 distribute.py 第 79-339 行可以查看完整实现它会按平台与架构选择编译命令macOS/Linux 用g -stdc11 -shared -fPIC编译SteamworksPy.cpp并链接-lsteam_apiWindows 用cl配合vcvars64.bat编译SteamworksPy64.dll下载 Steamworks SDK默认steamworks_sdk_163.zip可用--sdk-url/--sdk-zip覆盖并把产物统一拷贝到仓库根目录libs/。这是可选步骤——仓库内已提供预编译二进制无需重复构建。另外请勿在未经维护者同意的情况下提交/PR 这些二进制。6.3 macOS Gatekeeper 注意事项macOS 的 Gatekeeper 运行时保护可能导致 RimSort或依赖库无法运行。可手动移除隔离属性xattr -d com.apple.quarantine /path/to/RimSort.app xattr -d com.apple.quarantine /path/to/libsteam_api.dylib将/path/to/替换为实际路径例如xattr -d com.apple.quarantine /Users/John/Downloads/RimSort.app七、todds纹理优化依赖RimSort 使用 todds 作为纹理优化依赖。正式发布中它被打包进二进制从源码构建/运行时你需要手动放置一个 todds 二进制Linux / macOS./todds/toddsWindows.\todds\todds.exe自动化脚本distribute.py会通过 GitHub API支持GITHUB_TOKEN环境变量认证获取最新 release 并按平台下载对应压缩包、解压到todds/目录且显式补上可执行权限见 distribute.py 第 361-420 行。八、自动化构建uv run python distribute.py8.1 一键构建对大多数场景最省心的方式是执行仓库提供的自动化脚本uv run python distribute.py它会依次完成初始化/更新子模块 → 可选构建或拷贝 SteamworksPy 库 → 获取最新 todds release → 使用 Nuitka 编译应用最终产出包含全部依赖与子模块的本平台可分发产物。8.2 完整参数说明distribute.py使用argparse解析参数定义见 distribute.py 第 539-613 行支持按需裁剪流程参数作用-d/--dev启用 dev 模式安装开发依赖构建时强制附加控制台--windows-console-modeforce--skip-submodules跳过子模块初始化步骤--skip-steamworkspy跳过 SteamworksPy 库的拷贝--build-steamworkspy改为从源码构建 SteamworksPy而非拷贝预编译库可配合下方两个 SDK 参数--sdk-url URL从指定 URL 下载 Steamworks SDK默认使用硬编码 URL--sdk-zip path从本地 zip 解压 Steamworks SDK--skip-todds跳过获取最新 todds release--skip-build跳过 Nuitka 编译例如只想准备环境/依赖时使用--product-version MAJOR.MINOR.PATCH.INCREMENT指定构建产物版本号查看完整帮助uv run python distribute.py --help8.3 底层构建原理freeze_applicationdistribute.py的freeze_application()第 423-431 行揭示了 Nuitka 驱动的关键细节它先把submodules/SteamworksPy加入PYTHONPATH环境变量再执行 Nuitka 编译app/包。Nuitka 的实际选项声明在 app/main.py 头部的nuitka-project:注释中包括输出文件名RimSort、输出目录build/启用pyside6插件覆盖 Qt 插件--include-packagesteamworks、--include-data-filesteam_appid.txtSteamworks 运行需要内嵌themes/default-icons/AppIcon_alt.icoWindows 图标与AppIcon_a.icnsmacOSmacOS 使用--modeapp生成.app包其余平台使用--modestandalone若存在version.xml则内嵌版本信息AppInfo启动时读取它显示版本号附带--python-flagno_asserts,no_docstrings等优化。构建完成后macOS 还会执行两个后处理步骤见 distribute.py 第 443-516 行post_build_fixup_macos_steamworks确保.app包内存在通用的SteamworksPy.dylib按宿主 CPU 挑选合适的架构变体拷贝post_build_optimize_macos_bundle调用 packaging/optimize_macos_bundle.py 瘦身 fat binaries 以减小体积。如果你需要本地快速迭代而直接驱动 Nuitka务必记得按上述方式设置PYTHONPATH并保持与distribute.py一致的选项真实构建仍推荐优先使用distribute.py。九、打包与分发just build 与平台产物9.1 通过 just 构建justfile 的build配方第 228-234 行在调用distribute.py前会先执行子模块初始化、全量质量检查check与 i18n 编译保证产物干净just build # 标准构建 just build-version 1.2.3.4 # 指定版本号构建Linux 下还可将既有 Nuitka 输出进一步打包为 AppImagejust build-appimage VERSION1.0.0Windows 下官方另有 packaging/msi/RimSort.wixproj 与 packaging/msi/build_msi.ps1 生成 MSI 安装包Linux 的桌面集成文件位于 packaging/linux/。9.2 常用开发配方速查以下是 justfile 中最常用的配方配方用途just dev-setup一键初始化子模块 安装全部依赖 编译翻译文件just run运行 RimSortuv run python -m appjust test运行测试pytest含 doctest 模式just test-coverage运行测试并输出 XML/HTML/终端覆盖率报告just check全量代码质量检查Linux 走 super-linter 容器 typecheck pyrightWindows 走 typecheck pyright ruff ruff-format jscpd markdownlint shfmt deferred-importsjust fix自动修复 lint/格式问题just typecheckmypy 静态类型检查just ruff/just ruff-formatruff lint 与格式检查just i18n-compile将locales/*.ts编译为locales/*.qmjust i18n-update从app/源码提取可翻译字符串到.tsjust ci本地模拟 CI全部质量检查 带覆盖率测试just clean清理构建产物与缓存just update更新依赖到最新兼容版本uv lock --upgrade9.3 测试与代码质量RimSort 的测试位于 tests/ 目录覆盖排序算法tests/sort/、元数据tests/models/metadata/、Steam 相关工具tests/utils/steam/、视图与窗口tests/views/、tests/windows/等模块。运行just test质量检查体系just check/ CI包括ruff lint 与格式、mypy 与 pyright 类型检查、JSCPD 复制粘贴检测、shfmt 脚本格式、markdownlint、gitleaks 密钥扫描、checkov 配置扫描等配置均集中在 pyproject.toml 与仓库根目录的各类配置文件如.jscpd.json、.markdownlint.json。十、常见问题与排错要点子模块缺失克隆时未带--recurse-submodules运行报模块导入错误——执行git submodule update --init --recursive或just dev-setupSteamworksPy 导入失败确认libs/下存在重命名后的通用库SteamworksPy.so/SteamworksPy.dylib/SteamworksPy64.dll且与你的 CPU 架构匹配macOS 无法启动/依赖库无法加载检查是否被 Gatekeeper 隔离使用xattr -d com.apple.quarantine移除隔离属性从源码运行污染生产数据使用uv run python -m app --dev或RIMSORT_DEV1启用数据隔离翻译未生效/缺失.qm执行just i18n-compile重新编译 locales/ 下的翻译文件Windows 多进程问题Nuitka 编译态下程序会自动调用multiprocessing.freeze_support()并将启动方式切换为spawn见 app/main.py 第 221-228 行无需手动处理。十一、总结完整的开发到发布工作流将上述内容串起来RimSort 的典型开发发布流程为git clone --recurse-submodules -j8克隆仓库与子模块just dev-setup一键完成依赖与翻译编译just install-hooks安装提交前质量门禁uv run python -m app --dev在隔离环境中运行、调试just check just test通过全部质量检查与测试uv run python distribute.py或just build产出本平台可分发二进制跨平台发布则依赖 GitHub Actions 流水线在文档第二节所列的 CI 运行环境上分别构建 Linux / macOSx86_64 与 arm/ Windows 产物。无论是本地开发还是为 RimSort 贡献代码本文覆盖的每一环节都有仓库内的源码、配置与测试可查证环境定义见 pyproject.toml命令封装见 justfile构建编排见 distribute.py运行时入口见 app/main.py路径与 dev 模式逻辑见 app/utils/app_info.py。赞分享桌面应用游戏开发CLI【免费下载链接】RimSortRimSort is an open source mod manager for the video game RimWorld. There is support for Linux, Mac, and Windows, built from the ground up to be a reliable, community-managed alternative to RimPy Mod Manager.项目地址https://gitcode.com/gh_mirrors/ri/RimSort点击查看免费下载相关推荐Vosk-API 在 Windows 加载 libvosk.dll 失败3 种报错对号入座5 分钟修好Vosk API 在 Windows 加载 libvosk.dll 失败3 种报错对号入座5 分钟修好 你刚把 Vosk API clone 下来Wind知识管理桌面应用OpenNHP 源码编译指南从 WSL 环境搭建到多平台二进制构建OpenNHP 源码编译指南从 WSL 环境搭建到多平台二进制构建 本篇指南以 OpenNHP 官方构建文档为核心完整讲解从零搭建 WindowsWSL网络安全零信任密码学身份认证网络React Native Debugger 开发贡献指南从源码构建、运行调试到跨平台打包React Native Debugger 开发贡献指南从源码构建、运行调试到跨平台打包 React Native DebuggerRNDebugger是开发工具移动开发桌面应用上一篇跨平台灯光控制QLC在Windows、macOS和Linux系统的安装与优化下一篇picocom终极指南掌握Linux串口通信的高效利器创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考