2023 年用 python 编写的真正可移植的可执行文件

Truly portable executables written in python in 2023

提问人:Arseniy 提问时间:11/12/2023 更新时间:11/12/2023 访问量:26

问:

我最近花了很多时间弄清楚如何将用 Python 编写的工具分发为独立的、独立的可执行文件,这些工具可以在大多数 linux 发行版上运行,而无需特殊环境(包括 python 本身)。决定写这篇文章来讨论我的方法。

以下是我想出的几个简单步骤来制作这个技巧:

  1. 首先,这一点非常明显 - 使用可以制作此类可执行文件的特殊工具,例如 Nuitka、Pyoxidizer、PyInstaller、python-appimage 等。

  2. 针对足够旧的 glibc 构建应用程序。您可以使用一些旧的 Linux 发行版来执行此操作,或者只是手动设置此类工具链。它对 c 扩展、nuitka/pyoxidizer 等工具和 python 本身很重要。

  3. 最后但并非最不重要的一点是 - 不要忘记依赖项和依赖项的依赖项。所有 Python wheel 都应该有一个平台标签或适合您要求的 manylinux 标签之一。您可以使用 auditwheel 检查标签并修复损坏的标签。但幸运的是,在过去的 5-10 年里,大多数主流软件包都收到了许多 linux 轮子。any

当然,PyOxidizer/Nuitka/pyinstaller/etc 陷阱也会存在问题,尤其是对于大型项目,因此您需要在想要支持的每个 Linux 中进行一些 e2e 测试。

出于教育目的,我做了这个小 repo。它包括:

  1. 具有不良依赖项和 C 扩展的示例应用。
  2. 用于创建仅具有兼容轮子的“驾驶室”的脚本(和 )。manylinux*any
  3. 使用 Nuitka、PyOxidizer、Appimage、pex 构建可执行文件的脚本。
  4. 可移植性测试(在不同的 Linux 发行版中运行可执行文件)和性能基准测试。
  5. Readme 和 Makefile 使用单个命令运行任何步骤。

这显然不是一个非常有用的 repo,但至少它帮助我稍微探索了这个话题,也许它可以帮助展示我对这个话题的态度。 我将不胜感激有关该主题的任何反馈和想法!请证明我错了,这将非常有帮助!

python linux 打包 可移植性 nuitka

评论


答: 暂无答案