如何远程更新Python应用程序

时间:2011-08-03 19:50:13

标签: python packaging remote-access downloading software-update

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

另外,请原谅我的问题含糊不清。这将是我第一次实施更新程序。请随意提及您希望我添加的具体内容。

3 个答案:

答案 0 :(得分:12)

如果您尚未使用InnoSetup打包程序,我强烈建议您切换到它,因为它具有使这类事情变得更容易的功能。您可以在InnoSetup脚本中指定任何特殊情况,例如,如果文件已经存在则不应更新(即,如果您有任何内部配置文件或类似内容)。

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

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

  1. 通过HTTP从Web服务器检索当前版本文件,并将版本号与应用程序自己的APP_VERSION进行比较,检测新版本何时可用。如果客户端计算机没有Internet访问权限,请确保以优雅方式执行此查询,并且在执行请求时不会阻止GUI(如果网络问题导致查询等待很长一段时间才能超时)。
  2. 如果有更新的版本,请询问用户是否要更新,以及是否说是将更新的安装程序下载到TEMP目录。根据您使用的GUI工具包,在下载过程中有各种显示进度对话框的机制;这是一个好主意,因为安装程序可能至少是MB。
  3. 关闭您的应用,运行特殊更新脚本in the background,然后重新启动应用。
  4. 更新脚本将等待原始进程完全死亡(最简单的方法是将原始进程的PID作为命令行参数传递,并且每隔一秒左右更新脚本send a query signal 0 to that process,直到它然后它可以在后台静默运行安装程序,也许在向用户显示“Please Wait ...”对话框时。安装程序完成并在其返回代码中报告成功后,更新程序可以重新启动程序。

    根据应用程序的大小,这比使用git或其他SCM的方法更浪费带宽。使用此方法的每次更新都将涉及下载最新版本应用程序的整个安装程序,而SCM只会下载已更改的文件。但是,它的优点是除常规Web服务器外不需要特殊的服务器设备,并且在用户的计算机上没有特殊的SCM客户端安装。

    另外,InnoSetup一般都很酷。 : - )

答案 1 :(得分:7)

我建议使用源控制程序,如git或subversion。此外,如果你对所有人都看到代码没问题,你可以在github上发布代码,任何人都可以从中获取代码。您可以将其设为私有,但您必须为此付费,并且所有用户也将创建一个github帐户并使用他们的git install进行设置。

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

为了清楚起见,如果你想这样做,你必须将代码放在服务器上并支持SSH并设置git。如果您不想通过所有服务器设置,我会推荐github。

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

github - https://github.com/

答案 2 :(得分:0)

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

好像esky已有一段时间了。尽管自2018年以来已弃用。

最新和最新的解决方案似乎是pyinstallerpyupdater的组合。请注意,我没有个人经验,正在寻找朋友。

尽管它似乎支持Windows,Linux和Mac以及python 2和3,所以绝对值得一看。