Skip to main content

A general purpose Windows program upgrade tool

Project description

Project logo

Python version License

XiaoqiangUpdater

这是一个通用的自动更新模块,适用于Windows项目(因为时间有限,没有测试其他平台)。该模块包括一个独立的更新程序,能够检测、下载和安装更新,并重启主应用程序。

实现原理

该模块通过检查当前版本和最新版本之间的差异,从指定的URL下载更新包,并验证其完整性。然后将更新包解压到指定的安装路径,并重启主应用程序。

使用该模块需要满足以下条件:

  1. 你的项目发布时打包成一个zip格式的压缩包。
  2. 你的项目需要提供一个exe入口文件,用于启动更新程序。
  3. 你的项目如果是多目录多文件,exe文件需要在你项目的根目录下。
  4. 当你发布新版本的时候,建议保持exe入口文件名不变(例如:app.exe),否则需要你每次都在updater_config.json 中修改main_app字段。

技术栈

  • Python 3.11.5
  • requests
  • tkinter
  • psutil
  • pyinstaller

安装

使用 pip 安装:

pip install XiaoqiangUpdater

使用说明

参数说明

使用更新程序 updater 时,可以指定以下参数:

  • config_path:配置文件路径(默认为 updater_config.json ,如果没有指定具体的配置文件路径,程序将自动在当前目录下遍历查找一个名叫 updater_config.json 的配置文件。)
  • --help:显示此帮助信息并退出。

配置文件说明

示例配置文件 updater_config.json 的内容如下:

{
  "current_version": "1.0.0",
  "latest_version": "1.1.0",
  "update_url": "http://example.com/updater.zip",
  "main_app": "app.exe",
  "verify_file_md5": "d41d8cd98f00b204e9800998ecf8427e",
  "logo_path": "path/to/logo.png",
  "open_current_version_on_fail": true,
  "install_dir": "path/to/install/directory"
}

配置项说明

  • current_version:当前版本号。
  • latest_version:最新版本号。
  • update_url:更新包的下载URL。
  • main_app:主程序的路径(相对路径:一般都是放在根目录下的exe入口文件)。
  • verify_file_md5:更新包校验文件的MD5值(可选),可以直接调用模块中的get_file_md5方法获取。
  • logo_path:图形用户界面的图标路径(可选)。
  • open_current_version_on_fail:更新失败或取消时是否打开当前版本的程序(可选)。默认是 True
  • install_dir:软件解压更新的目录(可选)。默认是 updater.exe 所在的目录。

注意:

  1. 模块会自动使用 updater.exe 文件所在的目录与设置的相对路径或目录名进行拼接。
  2. 如果没有指定具体的配置文件路径,程序将自动在当前目录下遍历查找一个名叫 updater_config.json 的配置文件。

生成示例配置文件

  • 你可以调用updater_config_example方法快速生成一个示例配置文件:

    from XiaoqiangUpdater import updater_config_example
    
    if __name__ == '__main__':
        updater_config_example(save_path='updater_config.json')
    

打包更新程序

直接使用

手动打包

  • 配置updater(可默认)

    from XiaoqiangUpdater import (updater, updater_config_example)
    
    
    def test_updater():
        updater_config_example(save_path='updater_config.json') # 这里为了方便生成一个示例配置文件,这里需要你根据自己的项目去生成
        updater(config_path='updater_config.json')   # 指定配置文件路径,不指定:默认会自动在当前目录下遍历查找名为updater_config.json的配置文件
    
    
    if __name__ == '__main__':
        test_updater()
    
  • 调用pack_to_exe方法,将 your_updater 打包成可执行文件:

    from XiaoqiangUpdater import pack_to_exe
    
    if __name__ == '__main__':
        pack_to_exe(main_file='test_updater.py', with_cmd_window=False, app_ico_logo=None)
    

项目中使用示例

# _*_ coding : UTF-8 _*_
# 开发人员: Xiaoqiang
# 微信公众号: xiaoqiangclub
# 开发时间: 2024/5/25 11:01
# 文件名称: app.py
# 项目描述: 测试程序
# 开发工具: PyCharm
import os
import json
import subprocess
import sys
import tkinter as tk
from tkinter import ttk
from XiaoqiangUpdater import updater, updater_config_example


def app():
    root = tk.Tk()
    root.title("XiaoqiangClub")

    # 设置窗口大小
    root.geometry("400x200")

    # 设置窗口图标
    try:
        root.iconphoto(True, tk.PhotoImage(file="xiaoqiangclub_logo.png"))
    except Exception as e:
        print(f"Error loading logo: {e}")

    # 创建标签
    label = ttk.Label(root, text="XiaoqiangClub v1.0.0", font=("Helvetica", 24))
    label.pack(expand=True)

    root.mainloop()


def generate_config():
    """
    注意:这个函数仅用于生成示例配置文件,在实际使用中需要你自己去写这个函数。
    """
    config_path = os.path.join(os.getcwd(), "updater_config.json")
    updater_config_example(save_path=config_path)
    print(f"配置文件已生成:{config_path}")


# 用于生产环境调用exe文件
def main():
    try:
        # 调用生成配置文件函数
        generate_config()
        # 调用更新程序
        updater_path = os.path.join(os.getcwd(), "updater.exe")
        subprocess.Popen([updater_path])
        sys.exit()
    except Exception as e:
        print(f"检查更新时出错: {e}")


# 仅用于测试,调用updater.py中的start_update函数
def main_test():
    try:
        # 调用生成配置文件函数
        generate_config()
        # 调用更新逻辑
        updater("updater_config.json")
        sys.exit()
    except Exception as e:
        print(f"检查更新时出错: {e}")


if __name__ == "__main__":
    # 生产环境使用:
    # main()

    # 测试使用:
    main_test()
    # 启动应用程序
    app()

注意事项

  • generate_config方法需要你自己去写,用于生成配置文件。
  • 请确保更新URL和文件路径正确,并且更新包完整。
  • 为了确保安全,建议验证下载文件的完整性。
  • 请根据实际情况修改主应用程序中的更新检查逻辑和参数配置。

支持我

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

xiaoqiangupdater-0.0.1.tar.gz (29.9 kB view hashes)

Uploaded Source

Built Distribution

XiaoqiangUpdater-0.0.1-py3-none-any.whl (28.0 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page