【发布时间】:2009-04-17 13:22:58
【问题描述】:
我维护一个基于 PyQt 的跨平台应用程序,在 linux mac 和 windows 上运行。
windows 和 mac 版本使用 py2exe 和 py2app 分发,这会产生相当大的包 (~40 MB)。
我想添加一个“自动更新”功能,基于补丁来限制下载大小:
- 在 http 服务器上检查新版本
- 下载更新到最新版本所需的补丁
- 应用补丁列表并重新启动应用程序
我有一些问题:
- 由于打开的文件被锁定且无法覆盖,更新 Windows 应用程序的首选方法是什么?
- 如何准备和应用补丁?也许使用bsdiff/pspatch?
[更新]
我创建了一个简单的类来使用bsdiff 制作补丁,这在他们的网站上宣传非常高效:我的应用程序的两个 py2exe 版本(未压缩约 75 MB)的差异会产生 44 kB 的补丁!对我来说足够小,我会坚持这种格式。
代码可在pyflu 的“更新”包中找到,这是一个小型 Python 代码库。
【问题讨论】:
-
出于兴趣,您打算如何处理跨越多个版本/更新的更新。例如一个用户有 1.0,那么当他们下次尝试运行它时,已经有(比如说)10 个更新?你会按需生成补丁吗?使用缓存我想它不会太糟糕,但假设你有一些可用的服务器端代码......
-
如果用户错过了 10 个更新,更新程序将下载更新到最新版本所需的 10 个补丁并一一应用。没有服务器端代码,只是一个显示目录内容的简单 apache 服务器。
标签: python deployment patch py2exe