Pythonturtle: 自动构建安装程序包

创建于 2018-09-23  ·  31评论  ·  资料来源: PythonTurtle/PythonTurtle

跟进问题https://github.com/cool-RR/PythonTurtle/pull/105#issuecomment -421965482, #106 和 #90,我想开始收集有关如何(最好)为所有人打包的信息PythonTurtle 运行的平台。 当我们知道如何手动执行包装时,将这一切自动化将是一项简单的任务。

换句话说,我们需要

  1. 目标包类型列表(例如 Windows 的 MSI、macOS AppImage、Debian DEB、RPM、Snap),以及
  2. 有关如何构建每种包类型的具体、详细步骤阅读: shell 命令)的完整列表,仅来自源代码管理中的源代码。

注意:如果在这个问题上写这个被证明不舒服,我们可能想使用项目 Wiki来帮助我们前进。

automation

最有用的评论

获得适用于 Windows 的 EXE 和适用于 macOS 的捆绑包之后的下一件好事可能是为 Linux构建一个 AppImage 。 这类似于 Mac 上的 .dmg 文件。 这将是所有 GNU/Linux 发行版的单一解决方案! :tada: :smiley:

AppImage 也有(有点)一个 AppStore,被称为AppImageHub比较让你明白这真的是一件很酷的事情。 :+1:

所有31条评论

我们目前似乎在 Windows 和 macOS 上使用py2exepy2app

根据最近在 PyCon Otto上的一次PyInstaller ,它允许为 Windows、macOS 和 GNU/Linux 等构建独立的可执行文件。

我同意我们绝对应该使用 PyInstaller 而不是 py2exe 和 py2app。

我同意我们需要一个可靠和自动的构建过程。

我们也不应该忘记构建PythonTurtle Python 包并在发布时将其推送到 PyPI。

我还建议通过将 Git 标签(带有版本号)推送到 GitHub 存储库来触发发布。 然后可以通过发布页面下载安装程序。 我希望这一切都能以无缝的方式实现。

我同意,虽然这种自动化是一个有点高的目标,但如果我们甚至达到可以发布的地步,我会欣喜若狂。

如果我们甚至达到可以发布的地步,我会欣喜若狂。

然后准备你的宇航服! :微笑:

正如怀疑的那样,PyInstaller 将需要在它应该为其构建安装程序的基础设施

我既没有 Windows 也没有 Mac。 因此,我需要做一些繁琐的工作,了解如何在 AppVeyor 上完成构建。 此外,我们需要一个安装了 Python 3 的 macOS(并且交叉手指,文档只是过时的,我们也可以使用 Python 3 构建)。

我可能最好从自动构建 Python 包开始(并自动将其上传到 PyPI)。 IIUC,无论如何,使用 PyInstaller 的(某些功能)构建需要setup.py
我们将有一种可能的方式来安装 PythonTurtle。

您想将我添加为PyPI 项目的维护者吗? 当我可以使用自己的凭据时,将使我更容易自动化操作。 不出所料,我的用户名是“bittner”。

我将您添加为 PyPI 的维护者。

关于 PyInstaller,我想知道带有 ReactOS 的 VM 是否可以用于生成 Windows 安装程序。

要让pip install PythonTurtle安装程序和所有需要的依赖项被证明是困难的:

结论:

  • 我们_可以_将install_requires=['wxPython']setup() ,但是除非已经安装了先决条件(在自述文件中提到),否则这将失败。 我们可能会发现 - 非常技术性的错误 - 并在安装失败的情况下打印有用的提示。
  • 作为替代方案,我们可以信任用户执行 README 中的安装步骤,并让 PythonTurtle 在无法导入wx模块(应用程序模块中的ModuleNotFoundError )时打印友好的_reminder_。

使用platform.release()和/或os.name以用户友好的“自动检测先决条件”方式进行操作是可能的,但也非常麻烦。 我建议,我们只需打印一条文本消息,然后通过 URL 参考自述文件的安装部分。

我想知道带有 ReactOS 的 VM 是否可以用于生成 Windows 安装程序。

我不确定我们将如何在云中的服务上使用虚拟机,以自动方式构建 PythonTurtle 包。 你能详细说明一下吗? (您打算仅在开发人员机器上本地使用吗?)

你说得对,我没有考虑清楚。

我想有2个问题:

  1. ReactOS 可以使用 PyInstaller 生成 Windows 安装程序吗?

  2. 我们可以将它设置为在云端自动工作吗?

假设第一个问题的答案是肯定的,并且没有提供该服务的 SaaS 提供商。 然后说我们可以设置一个 Docker 镜像,它运行带有 ReactOS 来宾的 VirtualBox。 也许我们可以找到一个 SaaS 提供商来为我们运行那个 Docker 镜像?

https://github.com/pypa/python-packaging-user-guide/issues/267包含很多有趣的打包 Python 应用程序的链接。

一旦确定将 Linux 包上传到 GitHub(通过 PR #123),我们就会跳上macOS

获得适用于 Windows 的 EXE 和适用于 macOS 的捆绑包之后的下一件好事可能是为 Linux构建一个 AppImage 。 这类似于 Mac 上的 .dmg 文件。 这将是所有 GNU/Linux 发行版的单一解决方案! :tada: :smiley:

AppImage 也有(有点)一个 AppStore,被称为AppImageHub比较让你明白这真的是一件很酷的事情。 :+1:

听起来不错!

到目前为止,在 macOS 上构建应用程序包(使用 PyInstaller)还不能完全正常工作。 作为替代方案,我想,我们可以创建一个 Homebrew 公式。 我目前正在查看相关文档:

嗯,看来需要有 Mac 的人才能有效地开发公式。 虽然看起来并不难,但实际上。 :思维:

下面是与Python相关的公式(3):

  • Python (似乎安装了3.7; Python@3是一个符号链接,一个所谓的“别名”)
  • wxPython (取决于Python@2 ,另见 https://github.com/Homebrew/homebrew-core/issues/32744)

依赖Python@3 (=3.7) 并通过 pip 安装 wxPython 可能就足够了(就像我们的测试一样)。

仅供参考,如果自动发布不起作用(它们目前可能不会起作用,因为api_key:设置为只是一个示例值),以下是VSCodium 项目如何在 GitHub 上进行自动发布。 :+1:

Ram,您已经提到“Windows 安装程序”是当前的首要任务。 我同意。

让我们记下工会的当前状态。

Windows 安装程序(进度概览)

  • 自 2018 年 10 月以来,Windows 版本都在 AppVeyor 上运行
  • 这些构建创建了一个 Windows .EXE 二进制文件和一个 .MSI 安装程序(参见示例作业)。
  • .MSI 安装程序的文件大小非常小,以至于表明它实际上是空的。
  • 我记得,您已经尝试过 .EXE(通过下载并运行它)并且您确认 .MSI 不起作用。 (或者这是为我测试的其他人吗?不确定。)
  • 我记得,我在其他一些问题中提到过(或者是我们的私人聊天?)构建一个有效的 MSI 安装程序需要什么(它实际上只是一个 MS Visual Studio 项目文件,等等)。

我想,我已经准备好了一切。 现在,因为我既没有 Windows 计算机,也没有打算购买一台(顺便说一下,macOS 也是如此),唯一缺少的就是有人接管并将丢失的拼图放在适当的位置。 根据我的直觉,我们真的非常接近“任务完成”。

下一步(需要志愿者)

根据StackOverflowMicrosoft Visual Studio Installer Projects扩展创建必要的配置。

所以,你能接手吗? IIUC,需要做的是:

  1. 使用安装程序设置创建 Visual Studio 项目
  2. 确保安装程序在您的本地机器上成功构建
  3. .vdproj文件添加到该项目

然后 AppVeyor 将检测该文件,构建安装程序并在构建工件页面提供它以供下载。

参考

根据我的直觉,我们真的非常接近“任务完成”。

我不觉得如果我开始工作,它就会接近完成。 我什至不知道如何使用 Visual Studio Project,也不知道我们目前的计划是什么。 如果让我来接这个任务,我猜这需要几天的全职工作。

你为此付出了很多努力,所以告诉你这件事我感觉不太好,但我绝对不会自愿处理这个问题。 PythonTurtle 现在还不是我生活中的优先事项,我会花一个多小时来改进它,最重要的是。

通过从其他问题指出这个问题,我是否很烦人,说没有这个问题就没有任何价值? 我不会阻止你解决任何其他问题,我可能不会加入,因为在我看来这些努力是浪费,但我不会阻止你,如果你需要我进行代码审查或小事,我很乐意这样做。

对此另有想法。 您说“我既没有 Windows 计算机,也不打算购买一台”。 如果您反对执行您列出的项目是因为您在这张票上做得足够多,或者您不想花时间做与 Windows 相关的事情,那么是的,这是一个合理的反对意见。

如果问题是您不想花钱购买 Windows 许可证,那么也许可以解决。 一种想法是使用 ReactOS,并查看它是否运行 Visual Studio Project。 如果 ReactOS 不是一个选项,那么也许我可以为您获得 Windows 许可证/机器。 让我知道这是否有帮助。

让我知道这是否有帮助。

你认识一个对在 Windows 上编程_热心_的人吗? 对于 Python 来说,Windows 是一个凌乱的环境。 我不想为“Python + Windows”完美融合的虚假形象做出贡献,仅此而已。

有关构建 MSI 安装程序(WiX、 WiX.Py )的替代解决方案,请参阅https://github.com/PythonTurtle/PythonTurtle/issues/108#issuecomment -683420022。 我们可能会以这种方式与 GitHub Actions 结合取得成功。 有人想试一试吗?

有人想试一试吗?

我没有,所以我想我们会等到可能的志愿者到来。

任务清单...

  • [] __Linux__:pyinstaller 构建成功

    • [ ] 在 GitHub 上自动化操作

  • [] __macOS__:pyinstaller 构建成功

    • [ ] 在 GitHub 上自动化操作

  • [] __Windows__:pyinstaller 构建成功

    • [ ] 在 GitHub 上自动化操作

一些提示可以帮助您取得进步:

  • [x] 使用python3 setup.py clean bundle您可以构建所有二进制包(使用 PyInstaller)。
  • [x] 就我所记得的而言,二进制文件在所有平台上都成功构建(包括 Windows 的 .exe)。
  • [] Windows 用户似乎期待Windows 安装程序; 这可能是 MSI 或 WiX.Py 安装程序(两者都尚未准备好)。
  • [ ] 每当我们将 Git 标签推送到master ,GitHub Actions 应该自动将二进制文件推送到我们的 GitHub Releases ; 我们可能想使用诸如动作/创建释放之类的东西来使我们不那么费力。

我们收到了@judej对我发布的 Microsoft 开发人员社区的帮助请求的非常好的回答! :喜悦:

底线:我们没有 MSI 志愿者,但有两个更有趣的项目,一个构建安装程序,另一个构建Python ZIP 应用程序

  1. pynsist – _a 工具,用于为 Python 应用程序构建 Windows 安装程序。 [...] 捆绑 Python 本身,因此您可以将您的应用程序分发给没有安装 Python 的人_
  2. 希夫- !_for建立完全独立的Python的zipapps在PEP 441概述,但包括他们所有的依赖关系_

这可能是值得评估的两个不错的选择。 谢谢裘德! :100: :medal_military:

凉爽的。 我最近也听说了PyOxidizer 。 我仍然不能 100% 确定我理解了这个项目(讨论),但它有可能做我们想要的。

我将在周末用shiv尝试这样做。 请尝试PyOxidizer然后我们可以比较笔记。

对不起,我几天前开始了一份新工作,我没有时间做任何事情:(

PyOxidizer对我来说听起来像是一个实验:一个运行在“Rust VM”上的 Python 应用程序,一个使用 Rust 创建的操作系统原生层。 我不确定这提供了什么好处。 我们运行的PyInstaller设置不是很好吗? :3rd_place_medal:

shiv是一种全新的方法(在我们的发布工件“组合”中是新的),提供给我们的观众可能会很有趣。 我觉得这个想法令人兴奋(尽管我敢打赌很少有人会使用它)。 :2nd_place_medal:

pynsist听起来像我们正在寻找的 Microsoft Windows 安装程序。 这可能会提供 Windows 人似乎期望的用户体验: :one: 下载安装程序,:2: 运行它以安装并添加开始菜单条目,:3: 从开始菜单启动应用程序。 :1st_place_medal:

pynsist 的缺点是仅适用于 Windows。 我将尝试在 Mac 和 Linux 上推进 Shiv(来自 LinkedIn)。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

cool-RR picture cool-RR  ·  8评论

blite picture blite  ·  3评论

DarwinSurvivor picture DarwinSurvivor  ·  3评论

nvie picture nvie  ·  3评论

dwt picture dwt  ·  3评论