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

时间:2012-08-21 16:47:58

标签: python compilation exe packaging software-distribution

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

3 个答案:

答案 0 :(得分:89)

这是一些常见的。除非明确指出,否则下面列出的所有项目都会在我上次编辑(2018年8月)时得到积极维护。

我还包括指向各自网站,回购和PyPi商家信息的链接,以便您自行查看更新频率。

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


以下程序的工作方式类似 - 它们将Python和您的程序捆绑在一起,有效地将它们组合在一起以生成可执行文件。

  • <强> PyInstaller:

    • 链接Website || Repo || PyPi
    • 支持:Windows 2.7,Mac和Linux上的Python 2.7和Python 3.4 - 3.7。
  • cx_Freeze:

    • 链接: Website || Repo || PyPi
    • 在Windows,Mac和Linux上支持 Python 2.7和3.5 - 3.7(?)。
  • pyapp:

    • 链接: Website || Repo || PyPi
    • 支持:仅限Mac上的Python 2.7和3.3(?) - 3.7(?)。
    • 注意:截至上次编辑时,我还无法确定pyapp支持的Python版本的确切范围。最新版本提到支持Python 3.7。

注意:此帖子的先前版本包括py2exerepo)和bbfreezerepo)的注释。这两个项目都已从此列表中删除:他们几年来几乎没有看到任何活动,看起来完全没有维护。请参阅旧文章的编辑历史记录。


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

  • <强> pynsist:

    • 链接: Website || Repo || PyPi
    • 支持:所有Python版本?注意 - 仅创建 Windows安装程序
    • 其他说明: Pynsist似乎支持将任意Python版本与您的应用程序捆绑在一起。但是,该工具本身需要运行Python 3.5+。

      Pynsist将为您的程序创建一个Windows安装程序,它将直接在用户的计算机上安装Python,而不是将其与您的代码捆绑在一起,并创建链接到您的Python脚本的快捷方式。虽然此程序仅生成Windows安装程序,但您可以在Mac和Linux计算机上still run Pynsist

  • <强> Nuitka:

    • 链接: Website || Repo (Github mirror) || PyPi
    • 在Windows,Mac和Linux上支持 Python 2.6 - 2.7和Python 3.3 - 3.7。
    • 其他说明:Nuitka将逐字编译您的Python代码并生成一个exe(而不是其他项目,只包含Python)以尝试加速您的代码。作为副作用,您还可以获得一个可以分发的方便的exe。请注意,您的系统需要C++ compiler
  • <强>用Cython:

    • 链接: Website || Repo || PyPi
    • 在Windows,Mac和Linux上支持 Python 2.6 - 2.7和Python 3.2 - 3.7(?)。
    • 其他说明: Cython类似于Nuitka,因为它是一个Python编译器。但是,不是直接编译代码,而是将其编译为C.然后,您可以使用该C代码和turn your code into an exe。您需要在系统上安装C编译器。

我个人喜欢使用PyInstaller,因为它对我来说最容易启动和运行,旨在与各种流行的库(例如numpy或pygame)很好地协作,并且与各种操作系统和Python版本具有很好的兼容性。

但是,我也使用cx_Freeze成功构建了各种exes而没有太大的困难,所以你也应该考虑这个程序。

我还没有机会尝试过pynist,Nuitka或Cython,但它们似乎是非常有趣和创新的解决方案。如果您在使用第一组程序时遇到麻烦,那么尝试使用这三个程序中的一个可能是值得的。由于它们的工作方式与Pyinstaller / cx_freeze风格的程序完全不同,因此它们可能会在第一组失败的奇数边缘情况下成功。

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

Nuitka和Cython(在我有限的经验中)似乎运作得相当好。再说一次,我自己还没有对它们进行过广泛的测试,所以我的主要观察结果是它们似乎需要更长的时间才能生成一个exe,然后才会冻结&#34;风格节目。

最后请注意,如果您只想支持Linux,您可能需要考虑为您的软件包创建一个发行版软件包,而不是将其转换为可执行文件。可以帮助您执行此操作的列表工具超出了本文的范围,但如果您决定探索此路线,则可以使用reading material

答案 1 :(得分:10)

pyinstaller仍处于积极发展阶段。您可以在GitHub上看到the latest changes

它支持所有三个主要平台:

  • Windows(32位和64位)
  • Linux(32位和64位)
  • Mac OS X(32位和64位)

它支持Python版本2.6和2.7。它不支持Python 3,但有一个实验Python 3 branch

更新

从版本3.2.1开始,它支持Python 2.7,3.3-3.5

答案 2 :(得分:2)

更好地使用pip install auto-py-to-exe,它提供了一个漂亮的UI,其中包含创建可执行文件所需的所有选项。

安装后,只需在终端或命令提示符下键入auto-py-to-exe

Auto-py-to-exe