Esky 修补程序

Posted

技术标签:

【中文标题】Esky 修补程序【英文标题】:Esky patching procedure 【发布时间】:2016-02-13 18:27:03 【问题描述】:

我正在尝试使用Esky 差异补丁自动更新,但我无法让应用程序通过这些差异补丁进行更新。似乎总是需要完整版本才能正确更新。

因此,如果我在更新服务器中有 0.1 版和补丁以及最高 0.3 的完整文件版本,客户端应用程序将获取两个补丁和完整的最新版本文件:

updatesServer/
  App-0.1.win32.zip (client version running)
  App-0.2.win32.zip (this isn't fetched)
  App-0.2.win32.from-0.1.patch (this is fetched first)
  App-0.3.win32.zip (this is fetched third)
  App-0.3.win32.from-0.2.patch (this is fetched second)

另外,如果最新版本不可用(本例中为 App-0.3.win32.zip),更新将失败。

behavior 我希望 Esky 能够获取补丁文件并进行更新,同时忽略其他可用的完整文件版本,因此更新速度非常快。有没有办法做到这一点?

环境信息:我使用的冰箱是 cx_freeze,我的 Python 版本是 3.4。

更新例程代码:

from esky import *
from esky.util import appexe_from_executable

def restart_this_app():
    appexe = appexe_from_executable(sys.executable)
    os.execv(appexe,[appexe] + sys.argv[1:])

if hasattr(sys, "frozen"):
    app = esky.Esky(sys.executable, UPDATES_URL)
    print("You are running version "+app.active_version)
    print("Looking for updates...")
    if app.find_update() is None:
        print("No updates have been found.")
    else:
        print("Updates available. Updating...")
        try:
            app.auto_update()
        except Exception as e:
            print("Error while updating:", e)
        else:
            print("Update complete.")
            print("Restarting app...")
            time.sleep(3)
            restart_this_app()

顺便说一句,这是我的第一个 *** 问题。感谢您查看它;)

【问题讨论】:

【参考方案1】:

This patch 是该问题的潜在短期解决方案。

请试一试,让开发人员知道它是否适合您。

【讨论】:

我现成的 esky pip 0.9.9 安装有点过时了,所以我从官方 repo 安装了 esky 0.9.10.dev0 以获得补丁。但是,问题仍然存在。我会尽力帮助解决这个错误。 补丁尚未应用,因为我们仍然不知道是什么导致了问题(没有时间),只有在从远程 url 安装补丁时才会引发异常。 github.com/cloudmatrix/esky/issues/113 另外,您能告诉我们您使用的是什么操作系统吗?例如,在 OSX 上,仅来自补丁的更新不起作用。我已经能够为 Linux 和 Windows 使用补丁,但我不得不承认,我没有让它们竞争(只有补丁存在于服务器上)。 @Rififi 我正在从 WinXP Virtualbox VM 生成 bdist_esky 可执行文件,并从那里测试更新,指向我的主机 OSX 机器上运行普通 http.server 和 Python3.4 的更新服务器.您使用哪个版本来运行 Linux 和 Windows 差异补丁?这对我有用,至少在一段时间内。

以上是关于Esky 修补程序的主要内容,如果未能解决你的问题,请参考以下文章

Esky 不包括子模块

Esky 的 Python 项目结构

为啥 esky 创建 2 个可执行文件?

如何使用 py2exe 和 esky 冻结 Celery?

Esky,没有找到冻结的版本

无法删除 esky 0.9.8 中的旧版本:Python