我正在开发一个桌面应用程序,我正在使用
PyInstaller
来生成分发文件。
我选择了
PyInstaller
而不是py2exe
,因为它非常容易使用,而且我不需要关心Windows dll,但是当我使用py2exe
时,我可以简单地使用Esky来自动更新,但我可以不要与 PyInstaller
一起使用。
所以我不知道如何启动自动更新应用程序。有人有一些想法或者只是知道如何使用
PyInstaller
和 esky?
您可以为主应用程序创建一个启动器应用程序,并在其中添加所有更新逻辑。启动器应用程序执行以下操作:
显示弹出窗口(这可以向用户快速反馈程序正在加载)
检查本地和存储库版本
如果是本地< remote (say v1.0 < v2.0) then:
.... 检查远程存储库是否存在名为 updater_v2.0.exe 的更新程序应用程序。
........ 如果有:下载运行并退出。 (见下文)
........ 如果没有:下载最新的主应用程序exe并替换本地的(这一步要注意文件访问权限——您正在尝试写入c:\program files)。
如果本地 > 远程则:
.... 显示错误/警告 除非 如果这是开发人员工作站(您需要为此进行设置)
启动主应用程序。
更新程序应用程序的目的是适应获取新的主应用程序 exe 还不够的情况。我还使用它来更新启动器应用程序本身(这就是为什么启动器在运行更新程序后立即退出 - 顺便说一句,在尝试覆盖启动器可执行文件之前给 Windows 一些时间)
还有PyUpdater。我看到这里没有引用
我前段时间遇到了同样的问题——所以我写了一个小库(
updater4pyi
)来在 Mac OS X、Linux 和 Windows 上做到这一点。您可以从 PyPI 获取它,例如使用
> pip install updater4pyi
源存储库位于:https://github.com/phfaist/updater4pyi。
这是一个小型且不是很成熟的项目。它的目的是尽可能灵活,不依赖于任何特定的 GUI 工具包。我在不同的平台上做了一些测试,但可能仍然存在错误。我希望它对其他人也有用。
截至今天,pyinstaller 仅提供实验性的 python3 支持。如果有人想使用 esky,我建议使用 cx freeze。它支持 python 2 和 3,并且可以在 Linux、Mac 和 Windows 上运行
然后您就可以使用esky了。 Esky 的优点是使用引导机制,以便您始终至少安装一个可运行版本。
正如 @djvg 在评论中指出的那样,最新(2023 年)的方法和工作演示是 https://github.com/dennisvang/tufup
Pyupdater esky等都存档了。