更新我的程序,使用基于diffbased的补丁方法

2024-04-25 14:43:29 发布

您现在位置:Python中文网/ 问答频道 /正文

目前,我的程序通过下载最新的。焦油gz包含源代码的文件,并将其提取到程序所在的当前目录中。有两种更新“模式”-一种是运行Python源代码的用户,另一种是用户以Windows exe运行程序。在

随着时间的推移,由于新的图像、库、文档和代码,我的程序的文件大小随着每次发布而变得越来越大。然而,有时从一个版本到另一个版本只会发生代码更改,所以用户最终会一遍又一遍地重新下载所有的图像、文档等,而只有少量的代码更改。在

我在想一个更有效的方法是使用一个基于补丁/差异的系统,在这个系统中,程序只需下载小的更改集,就可以从一个版本增量更新到另一个版本。在

但是,我该怎么做呢?如果用户运行的是0.38版,并且有0.42版,他们是否下载0.38->;39;0.39->;40;0.40->;41、0.41->;42?如何处理二进制文件中的差异?(图像,在我的例子中)。在

我还必须维护一个包含所有补丁的存储库,这还不算太糟。我只会生成每个新版本的差异。但我想对可执行文件做这件事比纯python代码更难?在

感谢您的任何意见。非常感谢。在


Tags: 文件代码用户文档图像gt程序版本
2条回答

我建议您不要重新设计您自己的更新管理系统,而是看一看开源选项,例如google updater(一年前它是开源的Omaha),我想Windows focus是可以的,因为您确实特别提到了Windows,但是如果您还需要Mac支持,update engine(对于Linux)中也提供了类似的功能您可能希望使用特定发行版的包管理系统,而不是使用任何附加软件)。在

正如您将在omaha overview中看到的,重点并不是确定和应用“增量”,而不是完全更新,而是为了用户的方便(和安全性,当更新解决潜在的安全问题时)而自动执行该过程。至于不同之处,我建议使用类似于subversion这样的版本控制系统(事实上,您可以毫无疑问地重用svn的大部分代码)只有文本文件是不同的,二进制文件的“差异”是全部或全部(对于大多数二进制文件格式,如果有的话,尝试发送少于整个新文件的收益太小了完全改变了;尤其是对于图像,以及更普遍的各种压缩文件来说,底层内容的微小更改通常会导致生成的文件发生巨大的更改)。在

如果您认为您的一些或全部二进制文件实际上可能受益于使用差异和增量补丁的方法,而不是全部或全部文件替换,我建议您首先使用一个专门的实用程序,如jojodiff进行验证,如果确实是这样的话(也许只适用于某些文件,虽然其他部分也可以完全替换),但您可以将它的补丁部分与更新程序一起打包(并将其作为Python的子进程运行,等等)。在

至于在你的服务器上维护增量,一个混合的方法应该是有效的:即,你应该尝试保持所有(二次数)的更新(从a→a+1,a→a+2,a+1→a+2,等等),但是当增量操作的优势变得太小而无法保证占用服务器上的存储和客户端的处理时间的成本时(当然,除了试探法,也就是try/experience and see,没有其他方法可以确定“太小”的阈值时,“切断”每个分支(支持完全替换方法);-). 在

你的更新管理器可以知道当前应用是哪个版本,哪个版本是最新版本,并且只应用相关的补丁程序。在

假设用户运行0.38,当前有0.42可用。0.42的更新包含了0.39、0.40、0.41和0.42的补丁(可能还有更远的历史)。更新管理器下载0.42更新,知道它是0.38,并应用所有相关的补丁。如果当前运行的是0.41,则只应用最新的补丁,依此类推。在

相关问题 更多 >