29

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

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

4

3 回答 3

20

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

接下来,为了让客户端机器了解您的应用程序的新版本,请在您的公共 Web 服务器上保留一个非常小的文件,其中包含当前版本的版本号和最新版本安装程序 exe 的 URL。为了使这个文件有用,每当您发布程序的较新版本时,您必须更新此文件,以及 InnoSetup 脚本中的版本号,以及程序中的某种 APP_VERSION 常量。

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

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

更新脚本将等待原始进程完全终止(最简单的方法是将原始进程的 PID 作为命令行参数传递,并让更新脚本每秒左右向该进程发送一个查询信号 0直到它消失。)然后它可以在后台静默运行安装程序,可能同时向用户显示“请稍候...”对话框。安装程序完成并在其返回代码中报告成功后,更新程序可以重新启动您的程序。

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

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

于 2011-08-04T01:38:21.023 回答
8

I would suggest using a source control program such as git or subversion. Also, if you are okay with everyone seeing the code, you can post the code on github, where anyone can pull from it. You could make it private, but you would have to pay for it and all the users would also have create a github account and set it up with their git install.

If you use a source control program, the other people will have to pull the edits manually by running a command, but you could make a script pr batch file that does this and have it run at start up or at regular intervals.

Just to be clear, if you want to do this, you will have to put the code on a server with and SSH support and set up git. If you don't want to go through all of the server set up, I would reccomend github.

git- http://git-scm.com/ (For windows version, go to downloads and select msysGit)

github - https://github.com/

于 2011-08-03T22:09:51.213 回答
1

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

似乎esky是一段时间的解决方案。尽管它自 2018 年以来已被弃用。

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

它似乎支持 windows、linux 和 Mac 以及 python 2 和 3,所以绝对值得一看。

于 2019-11-25T08:19:47.493 回答