自动更新使用 pyinstaller 生成的 python 可执行文件

问题描述 投票:0回答:5

我正在开发一个桌面应用程序,我正在使用

PyInstaller
来生成分发文件。

我选择了

PyInstaller
而不是
py2exe
,因为它非常容易使用,而且我不需要关心Windows dll,但是当我使用
py2exe
时,我可以简单地使用Esky来自动更新,但我可以不要与
PyInstaller
一起使用。

所以我不知道如何启动自动更新应用程序。有人有一些想法或者只是知道如何使用

PyInstaller
和 esky?

python py2exe pyinstaller esky
5个回答
17
投票

您可以为主应用程序创建一个启动器应用程序,并在其中添加所有更新逻辑。启动器应用程序执行以下操作:

显示弹出窗口(这可以向用户快速反馈程序正在加载)

检查本地和存储库版本

如果是本地< remote (say v1.0 < v2.0) then:

.... 检查远程存储库是否存在名为 updater_v2.0.exe 的更新程序应用程序。

........ 如果有:下载运行并退出。 (见下文)

........ 如果没有:下载最新的主应用程序exe并替换本地的(这一步要注意文件访问权限——您正在尝试写入c:\program files)。

如果本地 > 远程则:

.... 显示错误/警告 除非 如果这是开发人员工作站(您需要为此进行设置)

启动主应用程序。

更新程序应用程序的目的是适应获取新的主应用程序 exe 还不够的情况。我还使用它来更新启动器应用程序本身(这就是为什么启动器在运行更新程序后立即退出 - 顺便说一句,在尝试覆盖启动器可执行文件之前给 Windows 一些时间)


11
投票

还有PyUpdater。我看到这里没有引用


7
投票

我前段时间遇到了同样的问题——所以我写了一个小库(

updater4pyi
)来在 Mac OS X、Linux 和 Windows 上做到这一点。您可以从 PyPI 获取它,例如使用

> pip install updater4pyi

源存储库位于:https://github.com/phfaist/updater4pyi

这是一个小型且不是很成熟的项目。它的目的是尽可能灵活,不依赖于任何特定的 GUI 工具包。我在不同的平台上做了一些测试,但可能仍然存在错误。我希望它对其他人也有用。


0
投票

截至今天,pyinstaller 仅提供实验性的 python3 支持。如果有人想使用 esky,我建议使用 cx freeze。它支持 python 2 和 3,并且可以在 Linux、Mac 和 Windows 上运行

然后您就可以使用esky了。 Esky 的优点是使用引导机制,以便您始终至少安装一个可运行版本。


0
投票

正如 @djvg 在评论中指出的那样,最新(2023 年)的方法和工作演示是 https://github.com/dennisvang/tufup

Pyupdater esky等都存档了。

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