自我更新py2exe/py2app应用程序

Lup*_*uch 12 python deployment patch py2exe

我维护一个跨平台的应用程序,基于在Linux mac和windows上运行的PyQt.

windows和mac版本使用py2exe和py2app分发,它产生相当大的包(~40 MB).

我想添加一个"自动更新"功能,基于补丁来限制下载大小:

  • 检查http服务器上的新版本
  • 下载更新到上一版本所需的补丁
  • 应用修补程序列表并重新启动应用程序

我有一些问题:

  • 更新Windows应用程序的首选方法是什么,因为打开的文件被锁定且无法覆盖?
  • 我如何准备和应用补丁?也许使用bsdiff/pspatch

[更新]

我做了一个简单的类来使用bsdiff制作补丁,这在他们的网站上广告非常有效:我的应用程序的两个py2exe版本上的差异(~75 MB未压缩)产生44 kB补丁!对我来说足够小,我会坚持这种格式.

代码可以在pyflu的'update'包中找到,pyflu是一个很小的Python代码库.

Jas*_*oon 5

我不相信 py2exe 支持修补更新。但是,如果您不将整个包捆绑到单个 EXE 中(py2exe 网站示例- 页面底部),则只需替换某些文件(例如 EXE 文件)即可避免较小的更新。这可以显着减少更新的大小。

您可以编写一个单独的更新程序应用程序,可以从应用程序内部下载/运行该应用程序。此应用程序每次更新可能会有所不同,因为需要更新的文件可能会发生变化。

一旦应用程序启动更新程序,它将需要自行关闭,以便覆盖文件。更新程序完成后,您可以让它在自行关闭之前重新打开应用程序。