ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

AALC 开发指南:从 Python 3.12 环境搭建、热重载开发到 Qt 翻译流水线

AALC 开发指南:从 Python 3.12 环境搭建、热重载开发到 Qt 翻译流水线 桌面应用RPA计算机视觉【免费下载链接】AhabAssistantLimbusCompanyAALCPC端Limbus Company小助手。AALCLimbus Company Assistant on PC项目地址https://gitcode.com/gh_mirrors/ah/AhabAssistantLimbusCompany点击查看免费下载本文是 AhabAssistantLimbusCompanyAALCPC 端 Limbus Company 小助手的开发者上手指南完整覆盖开发环境配置uv / Conda 双方案、热重载开发服务器main_dev.py的原理与用法以及 Qt Linguist 翻译流水线的提取、编辑与编译闭环。读完本文你将能够在本机搭建 AALC 的可开发环境理解自动重启与CtrlR手动重载的底层实现并掌握向项目新增/维护多语言翻译的标准流程。本文基于仓库内官方文档 assets/doc/zh/develop_guide.md 展开并结合 main_dev.py、pyproject.toml、app/language_manager.py 等源码进行深度印证。文章只涉及查看、安装、运行和配置层面的开发操作仓库为只读资源请勿在生成文章的过程中修改其内容。环境配置前置要求Python 版本项目要求 Python 3.12。pyproject.toml中通过requires-python 3.12明确声明代码中的match等 3.12 新语法也需要该版本支持。操作系统目前仅支持Windows环境开发。这从源码可以印证main.py 与 main_dev.py 都直接通过ctypes.windll调用user32/shcore设置进程 DPI 感知而windll仅存在于 Windows 平台依赖中也包含pywin32、windows-toasts、pyreadline3 (sys_platform win32)等 Windows 专属库见 requirements.txt。开发模式与正式启动的区别正式入口 main.py 会通过pyuac.isUserAdmin()请求管理员权限、通过端口62333的单实例互斥逻辑防止多开而开发模式会跳过这些检查详见下文热重载原理。方案一使用 uv推荐项目使用 uv 管理依赖pyproject.toml中[tool.uv] managed true依赖与开发依赖分别声明在dependencies与[dependency-groups].dev包含pyinstaller、pytest、ruff、watchdog等。推荐流程如下# 创建 Python 3.12 虚拟环境 uv venv --python3.12 # 激活环境后同步依赖会同时安装 dev 依赖含热重载所需的 watchdog uv syncuv venv --python3.12会为当前目录创建.venv虚拟环境若本机没有 3.12uv 会自动下载对应解释器。uv sync依据pyproject.tomluv.lock精确锁定版本安装全部依赖。热重载依赖watchdog与pynput位于 dev 组中因此开发务必使用uv sync而非仅安装运行依赖否则 main_dev.py 会报watchdog not installed并直接退出。若你只想拿到可运行的依赖清单requirements.txt由uv export --no-hashes --no-annotate --no-dev自动生成同样可配合 pip 使用。方案二使用 Conda不习惯 uv 时可以用 Conda 创建环境并安装依赖# 创建 Python 3.12 虚拟环境 conda create -n aalc python3.12 conda activate aalc # 升级 pip 并安装依赖 python -m pip install --upgrade pip pip install -r requirements.txt注意此方案安装的是 requirements.txt 中锁定的运行期依赖不含watchdog等 dev 依赖。若需在 Conda 环境下使用热重载还需手动补装watchdog、pynput等开发依赖可参考pyproject.toml的[dependency-groups].dev列表。启动开发服务器AALC 提供了独立的开发入口 main_dev.py它与正式入口 main.py 相互独立# 默认启用热重载自动重启 CtrlR python main_dev.py # 仅手动重载禁用自动热重载但保留 CtrlR python main_dev.py --no-reload两种模式的行为差异参数自动重启CtrlR 手动重载适用场景无参数默认✅✅日常开发改代码即生效--no-reload❌✅调试启动流程、监听大量文件时避免频繁重启启动时会打印清晰的模式提示Hot Reload Enabled/Hot Reload Disabled并显示被监听目录Watching directory: cwd。开发特性与热重载原理热重载开发模式的核心价值是改代码即重启。其实现集中在 main_dev.py 的AALCReloader与FileChangeHandler两个类中要点如下文件监听基于watchdog的Observer递归监听app、module、tasks、utils、i18n五个源码目录同时以非递归方式监听项目根目录main_dev.py。只有后缀为.py的文件变更才会触发重启reload_suffixes {.py}。变更判定FileChangeHandler对每个源文件先记录 SHA-256 内容哈希_prime_content_hashes事件到来时先sleep(0.2)等待编辑器落盘再重新计算哈希做内容级对比避免仅 touched 未改内容的假事件触发无谓重启main_dev.py。重启冷却两次重启之间至少有 1 秒冷却restart_cooldown 1.0防止快速连续保存造成重启风暴main_dev.py。忽略规则.git、.idea、.venv、__pycache__等目录以及config.yaml、theme_pack_list.yaml等运行时用户数据文件均被排除在触发条件之外main_dev.py因此修改配置文件不会触发重启。进程托管restart_app先terminate()旧进程超时 5 秒则kill()再以subprocess.Popen拉起新进程并打印新进程 PID 便于排查main_dev.py。开发模式的环境变量与入口改造AALCReloader.start()会向子进程注入三个环境变量main_dev.pyAALC_DEV_MODE1标记开发模式。在 app/my_app.py 中会据此判断是否加载非冻结非打包状态下的资源路径AALC_SKIP_ADMIN1跳过管理员权限检查AALC_FAST_START1加速启动流程。同时create_dev_main()会读取正式入口 main.py 的源码生成临时文件__main_dev_temp__.py通过字符串替换把两处关键检查短路掉main_dev.py管理员检查if not pyuac.isUserAdmin():→if False and not pyuac.isUserAdmin():单实例互斥检查if not mutex or last_error 0:→if False and (not mutex or last_error 0):也就是说开发模式不会弹 UAC 管理员授权窗口、允许多实例同时运行这对反复调试非常友好。临时文件会在退出时被cleanup()自动清理。快捷键CtrlR手动触发重载。即使使用--no-reload也始终生效——只要pynput可用就会启动键盘监听线程捕获CtrlR字符码\x12后置should_restart Truemain_dev.py若pynput未安装则会打印警告并禁用快捷键。CtrlC退出程序AALCReloader捕获KeyboardInterrupt后执行清理终止子进程、停止 observer、删除临时文件并退出main_dev.py。从源码结构可推断的实现细节开发模式要求main.py必须存在于当前目录否则报错退出说明热重载以替换后的正式入口为子进程目标属于进程级重启而非进程内 reload监听目录集合写死在watch_dirs [app, module, tasks, utils, i18n]中若未来新增顶层源码包需要同步修改此处main_dev.py自身只做 DPI 与日志初始化不承载任何业务逻辑业务代码全部在子进程中运行因此即使热重载脚本本身出问题也不影响对main.py逻辑的排查。翻译AALC 的界面国际化基于 Qt 的 Linguist 工具链源码中的中文文本通过pyside6-project lupdate提取为.ts翻译文件人工编辑后经pyside6-lrelease编译为二进制.qm运行时由 app/language_manager.py 中的LanguageManager加载并驱动界面重译。整体流程如下源码中文文本 → lupdate 提取 → .ts 翻译文件 → Linguist 人工翻译 → lrelease 编译 → .qm → LanguageManager 运行时加载提取可翻译文本到 .ts 文件# 使用 uv 运行推荐会自动使用项目环境 uv run .\scripts\translation_files_build.py # 或者直接用系统 python python scripts\translation_files_build.py该脚本scripts/translation_files_build.py内部实质执行的是pyside6-project lupdatepyside6-project会依据 pyproject.toml 中[tool.pyside6-project].files配置的清单提取翻译上下文——该清单列出了main.py、app/my_app.py、app/setting_interface.py、app/farming_interface.py、tasks/tools/production_module.py等 20 余个需要参与翻译的源文件以及已有的i18n/myapp_en.ts。新增了带 UI 文本的源文件时记得把它加入该清单否则文本不会被提取。手动编辑翻译提取完成后用 Qt 官方翻译编辑器打开.ts文件进行人工翻译pyside6-Linguist .\i18n\myapp_en.ts仓库中现存的 i18n/myapp_en.ts 是标准 TS 2.1 格式TS version2.1 languageen_US每条message记录source中文原文与translation英文译文并带location标注来源文件与行号例如来自app/farming_interface.py的退出游戏 → Exit Game等条目。文件规模达 3000 余行覆盖界面文本、提示信息等完整翻译单元。项目当前支持的语言代码定义在 app/language_manager.pySUPPORTED_LANG_CODE { zh_cn: 简体中文, # 暂时是zh_cn 等之后全局替换 en: English, }LanguageManager单例通过register_component注册实现了retranslateUi方法的 UI 组件set_language切换语言时先重载qt_lang与myapp_lang两套QTranslator再调用所有已注册组件的retranslateUi完成界面刷新。因此在 UI 组件中新增文本后需要同步实现/更新其retranslateUi方法并注册到LanguageManager否则切换语言时该组件不会刷新。编译生成 .qm 文件翻译编辑完成后编译生成 Qt 运行时实际加载的.qm二进制文件。三种方式等价# 方式一脚本批量编译遍历 i18n 下所有 .ts并确保 dist/AALC/i18n 目录存在 uv run .\scripts\translation_files_compile.py # 方式二直接用 python 运行同一脚本 python scripts\translation_files_compile.py # 方式三手动对单个文件编译 pyside6-lrelease i18n/myapp_en.ts -qm i18n/myapp_en.qmscripts/translation_files_compile.py 会遍历./i18n目录下所有.ts文件逐个调用pyside6-lrelease生成同名的.qm文件并打印Generated: path同时会预先创建dist/AALC/i18n目录与打包产物结构对齐。注意编译后.qm文件需与源码目录中的.ts保持同步更新运行时LanguageManager.reload_translator会尝试从i18n/路径加载myapp_lang_code.qmapp/language_manager.py。常见问题与排查建议提示watchdog not installed开发依赖未安装。使用uv sync而非仅pip install -r requirements.txt安装完整 dev 依赖后重试。CtrlR无响应pynput未安装时控制台会打印pynput not available, keyboard shortcuts disabled。安装pynput后重启开发服务器即可。修改config.yaml却触发/不触发重启设计上配置文件被显式忽略ignored_names含config.yaml及config.yaml.bak/backup/old、theme_pack_list.yaml修改它们不会触发重启。热重载循环重启检查是否频繁保存大文件内容哈希对比只对.py生效并留意 1 秒重启冷却若确实干扰调试改用python main_dev.py --no-reload仅保留手动CtrlR。新增翻译不生效依次检查——源文件是否加入 pyproject.toml 的[tool.pyside6-project].files、是否执行过translation_files_build.py重新提取、UI 组件是否实现并注册了retranslateUi、是否执行translation_files_compile.py重新编译.qm。小结AALC 的开发链路是一条完整的配置 → 运行 → 翻译闭环环境层面优先使用 uv 管理 Python 3.12 依赖开发层面通过 main_dev.py 获得免管理员、可多实例、改码即重启CtrlR手动兜底的开发体验其哈希对比与冷却机制保证了热重载的稳定性翻译层面则由lupdate → Linguist → lrelease → LanguageManager构成标准 Qt 国际化流水线。掌握这三部分即可在本仓库中开展日常开发与多语言维护工作。赞分享桌面应用RPA计算机视觉【免费下载链接】AhabAssistantLimbusCompanyAALCPC端Limbus Company小助手。AALCLimbus Company Assistant on PC项目地址https://gitcode.com/gh_mirrors/ah/AhabAssistantLimbusCompany点击查看免费下载相关推荐RTXGI-DDGI未来展望实时全局光照技术发展趋势分析RTXGI DDGI未来展望实时全局光照技术发展趋势分析 RTXGI DDGI实时光线追踪全局光照作为NVIDIA推出的革命性渲染技术正在重新定义游戏和JupyterLab开发环境搭建从源码编译到热重载配置JupyterLab开发环境搭建从源码编译到热重载配置 你还在为JupyterLab源码编译耗时过长而烦恼还在为修改代码后需要重启服务才能看到效果而抓狂本前端后端数据科学开发工具Label Studio 开发环境搭建从源码编译到热重载配置Label Studio 开发环境搭建从源码编译到热重载配置 你是否在为数据标注工具的二次开发环境配置而烦恼本文将带你从零开始通过6个步骤完成Label数据标注人工智能上一篇企业级文档统一化5步构建MarkItDown系统集成方案下一篇为什么选择OWASP Threat Dragon开源威胁建模工具对比分析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表