【问题标题】:Python script into a standalone single file executable that can auto-update?将 Python 脚本转换为可以自动更新的独立单个文件可执行文件?
【发布时间】:2014-03-27 19:03:08
【问题描述】:

我用 Python 2.7 为我的办公室编写了一个程序。使用带有 --onefile 标志的 PyInstaller,我已将其编译为单个 EXE 文件以分发给我的同事。我现在想弄清楚的是如何自动提供更新但仍将程序保留为单个文件。

我目前的方法是让程序提醒用户有新版本,并给出获取更新文件的说明。这可行,但我想找到一些无需用户参与的更新方法。

我知道Esky,它可以创建自动更新的 Python 程序,但据我所知,它要求程序作为多个文件存在。

关于如何制作一个可以自动更新的独立、单文件 EXE python 程序有什么建议吗?

【问题讨论】:

    标签: python windows auto-update pyinstaller esky


    【解决方案1】:
    • 您可以将新的可执行文件下载到临时文件夹中
    • 使用__file__ 了解可执行文件的当前位置
    • 显示需要重启的消息
    • 使用 sys.execcv 或 subprocess 替代方法将当前正在运行的进程替换为类似的小脚本

      "sleep(1) & copy {tempfile} {filename}".format(tmp_file,__file__)

    (用新exe覆盖旧exe的简单批处理命令)

    【讨论】:

    • 我正在寻找使用自删除批处理文件执行此操作的方法。不幸的是,Windows 在所有版本中都没有“睡眠”命令。我找到了this workaround for batch files,但我不知道如何在单行命令中完成。
    【解决方案2】:

    当您的应用程序提醒用户有新版本并且用户说他们想要它时,下载新的 exe,启动新的 exe,然后关闭当前的 exe。新的 exe 应该删除它看到的所有旧 exe。不同的版本需要不同的命名。

    【讨论】:

    • 我喜欢这个,又好又简单。如果用户想要使用程序的快捷方式,不同的文件名会导致问题,但也许没有理由使用单一文件程序的快捷方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-26
    • 1970-01-01
    • 2013-10-26
    • 2018-06-19
    • 2016-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多