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

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

这里有一些常见的。我只包括了截至上次编辑(2021年7月)时正在积极维护的项目

除非另有说明,否则下面列出的所有程序都将专门为其运行的操作系统生成exe。例如,在Windows中运行Pyinstaller将生成Windows exe,但在Linux中运行Pyinstaller将生成Linux exe。如果你想为多个操作系统生成一个exe,你必须考虑使用虚拟机或类似Wine的东西


以下程序的工作方式都很相似——它们将Python和您的程序捆绑在一起,有效地将它们结合起来,生成一个可执行文件

  • PyInstaller:

    网站| |回购| | PyPi

    在Windows、Mac和Linux上支持Python 3.5-3.9

  • cx\u冻结:

    网站| |回购| | PyPi

    在Windows、Mac和Linux上支持Python 3.6-3.9

  • py2exe:

    网站| |回购| | PyPi

    仅在Windows上支持Python 3.6-3.9

  • py2app:

    网站| |回购| | PyPi

    仅在Mac上支持Python 2.7(?)和Python 3(?)。目前尚未记录支持的Python版本的确切范围


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

  • pynsist:

    网站| |回购| | PyPi

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

    pynsist工具本身需要运行python3.5+,但支持将任何版本的Python与程序捆绑在一起

    Pynsist将仅创建Windows安装程序,但可以在Windows、Mac和Linux上运行。有关更多详细信息,请参阅他们的常见问题解答

  • Nuitka:

    网站| |回购(Github mirror)| | PyPi

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

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

  • cython:

    网站| |回购| | PyPi

    Cython类似于Nuitka,因为它是一个Python编译器。但是,它不会直接编译代码,而是将其编译为C。然后,您可以使用该C代码并将代码转换为exe。您需要在系统上提供一个C编译器

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


我个人的偏好是使用PyInstaller,因为它对我来说是最容易启动和运行的,它的设计可以很好地与各种流行的库(如numpy或pygame)配合使用,并且与各种操作系统和Python版本具有很好的兼容性

但是,我也成功地使用CXI-FILL构建了各种Excel,没有太大的困难,所以你也应该考虑尝试这个程序。

我还没有机会广泛尝试pynist、Nuitka或Cython,但它们似乎是非常有趣和创新的解决方案。如果您在使用第一组程序时遇到问题,不妨尝试这三种程序中的一种。由于它们的工作方式与Pyinstaller/cx_冻结式程序根本不同,因此它们可能在第一组失败的奇数边缘情况下成功

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

Nuitka和Cython(以我有限的经验)似乎工作得相当好。同样,我自己也没有对它们进行过广泛的测试,因此我的主要观察结果是,它们似乎需要更长的时间来生成exe,而不是;冻结“;样式程序可以


尽管如此,将Python程序转换为可执行文件并不一定是分发代码的唯一方式。要了解有关其他可用选项的更多信息,请参阅以下链接:

  • https://packaging.python.org/overview/#packaging-python应用程序
  • https://docs.python-guide.org/shipping/packaging/#for-linux发行版

发表评论