如何远程更新Python应用程序

问题描述 投票:19回答:3

将更改推送到用Python编写的程序的最佳方法是什么?我有一个用Python编写的软件,该软件会定期更新。最好的方法是什么?所有机器都将安装Windows 7。

也请原谅我的问题含糊。这是我第一次必须执行更新程序。随意提及您希望我添加的细节。

python packaging remote-access download software-update
3个回答
14
投票

如果您尚未将程序与InnoSetup打包在一起,强烈建议您切换到该程序,因为它具有简化此类操作的便利。您可以在InnoSetup脚本中指定任何特殊情况,例如如果文件已经存在(即,如果您有任何内部配置文件或类似的东西)不应该更新的文件。

[下一步,要允许客户端计算机查找应用程序的新版本,请在公共Web服务器上保留一个非常小的文件,该文件应具有当前版本的版本号以及最新版本的安装程序exe的URL。为了使此文件有用,每当您发布程序的较新版本时,都必须更新此文件以及InnoSetup脚本中的版本号以及程序中的某种APP_VERSION常量。

然后,您需要自己处理更新程序的这些部分:

  1. 通过HTTP从Web服务器中检索当前版本的文件,然后将其中的版本号与应用程序自己的APP_VERSION进行比较,确定何时有可用的新版本。确保以这样的方式进行此查询:如果客户端计算机无法访问Internet,并且不会在执行请求时阻止GUI(如果存在网络问题而迫使查询等待),则该查询会正常失败很长一段时间超时)。
  2. [如果有较新版本,请询问用户是否要更新,如果回答是,则将更新的安装程序下载到TEMP目录。根据所使用的GUI工具箱,有多种机制可用于在下载过程中显示进度对话框。这是个好主意,因为安装程序可能至少为MB。
  3. 关闭您的应用程序,运行特殊的更新脚本in the background,然后再次启动该应用程序。

更新脚本将等待原始进程完全终止(执行此操作的最简单方法是将原始进程的PID作为命令行参数传入,并每隔一秒钟左右就有更新脚本send a query signal 0 to that process直到消失。 )然后可以在后台静默运行安装程序,也许同时向用户显示“请稍候...”对话框。一旦安装程序完成并在返回代码中报告成功,更新程序就可以重新启动程序。

取决于您的应用程序的大小,这比使用git或其他SCM的方法更浪费带宽。使用此方法进行的每次更新都涉及为该应用程序的最新版本下载整个安装程序,而SCM仅下载已更改的文件。但是,它的优点是,除了常规的Web服务器之外,它不需要特殊的服务器功能,并且不需要在用户计算机上特殊安装SCM客户端。

另外,InnoSetup通常很酷。 :-)


7
投票

我建议使用诸如git或subversion之类的源代码控制程序。另外,如果每个人都可以看到代码,则可以将代码发布在github上,任何人都可以从中获取代码。您可以将它设为私有,但您需要付费,并且所有用户还必须创建一个github帐户并使用git install进行设置。

如果使用源代码控制程序,其他人将不得不通过运行命令来手动拉出编辑,但是您可以制作一个脚本pr批处理文件来执行此操作,并使其在启动时或定期运行。] >

请注意,如果要执行此操作,则必须将代码放在具有SSH支持的服务器上,并设置git。如果您不想完成所有服务器设置,我建议使用github。

git- http://git-scm.com/(对于Windows版本,请下载并选择msysGit)

github-https://github.com/


0
投票

对于那些研究过时的东西的人,我只是在研究如何创建可以远程更新的python应用程序(尽管不限于Windows,如OP)。

© www.soinside.com 2019 - 2024. All rights reserved.