You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用PyUpdater从USB闪存驱动器更新,无需调用Client.check_update()?

无需调用Client.check_update()实例化PyUpdater的AppUpdate类

当然可以手动实例化AppUpdate类,跳过Client.check_update()——PyUpdater的设计本身支持自定义更新源,完全适配USB介质场景。核心思路是直接提供AppUpdate所需的更新元数据与本地路径信息,替代原本从服务器获取数据的流程。

具体实现步骤:

  1. 读取USB上的更新元数据
    PyUpdater打包更新时会生成包含版本、哈希、文件名等关键信息的元数据文件(通常是latest.json或对应版本的JSON文件)。你需要从USB的更新目录中读取并解析该文件:
import json
from pyupdater.client import AppUpdate

# 替换为你的USB挂载路径和元数据文件位置
usb_meta_path = "/Volumes/MyUSB/pyupdater/latest.json"  # macOS示例
# usb_meta_path = "D:\\pyupdater\\latest.json"  # Windows示例

with open(usb_meta_path, "r") as f:
    update_meta = json.load(f)

# 提取关键字段(根据你的元数据结构调整,需和打包时的输出一致)
latest_version = update_meta["version"]
update_filename = update_meta["filename"]
update_hash = update_meta["file_hash"]
update_size = update_meta["file_size"]
  1. 手动构造AppUpdate实例
    直接传入当前应用的信息、更新元数据,以及USB上更新包的存放目录:
# 替换为你的应用名称和当前版本
current_app_version = "1.0.0"
app_name = "MyDesktopApp"

# 实例化AppUpdate
update = AppUpdate(
    app_name,
    current_app_version,
    latest_version,
    update_filename,
    update_hash,
    update_size,
    # 指定USB上更新包所在的根目录
    update_folder="/Volumes/MyUSB/pyupdater/",  # macOS示例
    # update_folder="D:\\pyupdater\\",  # Windows示例
    # 可选:设置是否强制更新
    mandatory=False
)
  1. 执行更新流程
    实例化完成后,即可像正常调用一样执行更新操作:
# 检查是否有可用更新(仅版本对比,因已提前获取更新信息)
if update.is_update_available():
    # "下载"更新(实际是从USB复制到本地临时目录)
    success = update.download()
    if success:
        # 验证更新包哈希(可选,AppUpdate内部也会自动验证)
        if update.verify_hash():
            # 安装更新
            update.install()

注意事项:

  • 确保USB上的文件结构与PyUpdater打包时一致:元数据文件和更新安装包需放在同一目录下,或对应update_folder参数指定的路径。
  • 处理不同系统的USB路径差异:可通过系统API自动检测USB挂载点,或让用户手动选择路径。
  • 务必验证更新包哈希值:这是防止文件损坏或恶意篡改的关键步骤,不可省略。

内容的提问来源于stack exchange,提问作者Michael Lintschinger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 08:15:45