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

自动更新pyinstaller生成的python可执行文件,python,py2exe,pyinstaller,esky,Python,Py2exe,Pyinstaller,Esky,我有一个正在使用的桌面应用程序,我正在使用PyInstaller生成反分发文件 我选择了PyInstaller而不是py2exe,因为它非常易于使用,而且我不需要关心windows DLL,但是当我使用py2exe时,我可以简单地使用它来自动更新,但我不能将它与PyInstaller一起使用 所以我不知道如何启动自动更新应用程序。有人有一些想法或者只是知道如何使用PyInstaller和esky?您可以为主应用程序创建一个启动程序应用程序,并在其中添加所有更新逻辑。启动器应用程序执行以下操作:

我有一个正在使用的桌面应用程序,我正在使用
PyInstaller
生成反分发文件

我选择了
PyInstaller
而不是
py2exe
,因为它非常易于使用,而且我不需要关心windows DLL,但是当我使用
py2exe
时,我可以简单地使用它来自动更新,但我不能将它与
PyInstaller
一起使用


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

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

显示一个弹出窗口(向用户提供程序正在加载的快速反馈)

检查本地和存储库版本

如果本地<远程(如v1.0 。。。。在远程存储库中检查是否存在名为updater_v2.0.exe的更新程序应用程序

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

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

如果本地>远程,则:

。。。。显示错误/警告,但如果这是开发人员工作站,则除外(您需要为此设置)

启动主应用程序


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

我不久前遇到了同样的问题——因此我在Mac OS X上编写了一个小库(
updater4pyi
)来实现这一点,Linux和Windows。例如,您可以从PyPI获得它

> pip install updater4pyi
源存储库位于:


这是一个小而不太成熟的项目。它意味着尽可能灵活,例如不依赖任何特定的gui工具包。我已经在不同的平台上做了一些测试,但是可能仍然存在bug。我希望它对其他人也有用。

到今天为止,pyinstaller只支持实验性的python3。如果有人想使用esky,我建议使用cx freeze。它支持Python2和Python3,并在linux mac和windows上工作


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

这里也没有引用它。

为什么不创建一个.bat文件,在windows计划程序中安排它每启动/关闭/小时左右运行一次呢?@Torxed,请记住您必须作为
系统运行它,否则将弹出命令提示符。您也可以在用户空间中运行它,并强制隐藏提示符,但肯定会有一个提示符初始化。您还可以创建一个约20行的Python服务脚本,让它运行一个“Pyinstaller”命令,并使用
C:>Python myservice.py install安装它
我们要做的是在internet上创建一个文件,定期检查文件中的版本号是否大于当前版本,提示用户下载新的安装程序。。。根据我的经验,自动更新是一项风险很大的业务,我认为@JoranBeasley解决方案可能最适合我的工作。但是,是的,实施起来非常困难。如果下载停止或出现其他问题,我可以中断应用程序。哇,我很高兴你这么做,我很快就会尝试!只有在回购协议未存档的情况下:(我将Esky与cx freeze一起使用,它们配合得非常好。您好!有没有视频可以演示如何执行此操作?谢谢!您很有可能找到使用此方法的开源应用程序,并且它可能比视频更好。我无法共享任何python代码,因为我只在VBScript中实现了此功能(一点也不喜欢它).我可以为python制作视频,但我为什么要;-)实际上并不需要它。Thanks@IceBear你找到开源项目了吗?@Piyush nopeee