从 Python 项目创建单个可执行文件

我想从我的 Python 项目中创建一个单独的可执行文件。用户应该能够下载并运行它,而不需要安装 Python。如果我只是发布一个包,那么我可以使用 pip、 round 和 PyPI 来构建和发布它,但是这需要用户拥有 Python 并且知道如何安装包。我可以使用什么来从 Python 项目构建自包含的可执行文件?

130826 次浏览

自2022年7月起,pyinstaller 正在积极开发之中。你可以在 GitHub 上看到 最新的变化。它支持 Windows、 Linux 和 MacOS; 32位和64位。它支持 Python 版本2.6、2.7和3.3 + 。

有几种不同的方法可以做到这一点。


第一种——可能也是最常见的——方法是使用“冻结”样式的程序。这些程序的工作原理是将 Python 和您的程序捆绑在一起,实际上是将它们组合成一个单一的可执行文件:

  • PyInstaller:

    网站 | | 回购 | | < a href = “ https://PyPi.python.org/PyPi/PyInstaller”rel = “ norefrer”> PyPi

    在 Windows,Mac 和 Linux 上支持 Python 3.7-3.10。

  • 定格:

    网站 | | 回购 | | < a href = “ https://PyPi.python.org/PyPi/cx _ 急冻”rel = “ noReferrer”> PyPi

    在 Windows,Mac 和 Linux 上支持 Python 3.6-3.10。

  • Py2exe:

    网站 | | 回购 | | < a href = “ https://PyPi.python.org/PyPi/py2exe/”rel = “ norefrer”> PyPi

    仅在 Windows 上支持 Python 3.7-3.10。

  • Py2app:

    网站 | | 回购 | | < a href = “ https://PyPi.python.org/PyPi/py2app/”rel = “ norefrer”> PyPi

    仅在 Mac 上支持 Python 3.6-3.10。

要记住的主要事情是,这些类型的程序通常只会为运行它的操作系统生成一个 exe。例如,在 Windows 中运行 Pyinstaller 将生成一个 Windows exe,但在 Linux 中运行 Pyinstaller 将生成一个 Linux exe。如果您想为多个操作系统生成一个 exe,那么必须考虑使用虚拟机或类似于 红酒的东西。


当然,这不是做事的唯一方法:

  • 网站 | | 回购 | | < a href = “ https://PyPi.python.org/PyPi/pynsist”rel = “ norefrer”> PyPi

    Pynsist 将为你的程序创建一个 Windows Installer,它将直接在用户的计算机上安装 Python,而不是将它与你的代码捆绑在一起,并创建链接到 Python 脚本的快捷方式。

    Pynsist 工具本身需要 Python 3.5 + 才能运行,但是支持将任何版本的 Python 捆绑到您的程序中。

    Pynsist 将只创建 Windows 安装程序,但可以在 Windows、 Mac 和 Linux 上运行。

  • 努伊特卡:

    网站 | | 回购(Github 镜像) | | < a href = “ https://PyPi.python.org/PyPi/Nuitka/”rel = “ norefrer”> PyPi

    Nuitka 将逐字地编译您的 Python 代码并生成一个 exe (与其他只包含 Python 的项目不同) ,以尝试提高代码的速度。作为一个副作用,您还将获得一个可以分发的方便的 exe。请注意,您的系统上需要有一个可用的 C + + 编译器

    在 Windows、 Mac 和 Linux 上支持 Python 2.6-2.7和 Python 3.3-3.10。

  • Cython:

    网站 | | 回购 | | < a href = “ https://PyPi.python.org/PyPi/Cython/”rel = “ noReferrer”> PyPi

    Cython 与 Nuitka 的相似之处在于,它是一个 Python 编译器。但是,它不会直接编译您的代码,而是将其编译成 C。然后你可以取 C 代码和 将代码转换为 exe。您的系统上需要有一个可用的 C 编译器。

    在 Windows、 Mac 和 Linux 上支持 Python 2.7和 Python 3.3-3.11。


我个人更喜欢使用 PyInstaller,因为它是最容易启动和运行的,可以很好地与各种流行的库(比如 numpy 或 pygame)一起工作,并且与各种操作系统和 Python 版本具有很强的兼容性。

但是,我也成功地使用 cx _ Froze 构建了各种前任程序,没有太多困难,所以您也应该考虑尝试使用这个程序。

我还没有机会广泛尝试 pynist、 Nuitka 或 Cython,但它们似乎是相当有趣和创新的解决方案。如果您在使用第一组程序时遇到麻烦,那么可能值得尝试这三个程序中的一个。由于它们的工作方式与 Pyinstaller/cx _ zen-style 程序的工作方式完全不同,所以在第一组失败的奇怪边缘情况下,它们可能会成功。

特别是,我认为 pynist 是一个很好的方法来回避整个分发代码的问题: Mac 和 Linux 已经有了对 Python 的本地支持,只是在 Windows 上安装 Python 可能真的是最干净的解决方案。(缺点是现在您需要考虑针对多个版本的 Python + 安装库)。

Nuitka 和 Cython (在我有限的经验中)似乎工作得相当不错。同样,我自己还没有对它们进行过广泛的测试,因此我的主要观察结果是,它们生成 exe 所需的时间似乎比“冻结”样式的程序要长得多。


所有这些都表明,将 Python 程序转换为可执行文件并不一定是分发代码的唯一方法。要了解更多有关其他选项的信息,请参见以下链接:

Auto-py-to-exe 是 PyInstaller 的 GUI。

Auto-py-to-exe