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

Sha*_*ame 73 python packaging software-distribution exe compilation

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

Mic*_*x2a 99

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

我还提供了各自网站,回购和PyPi列表的链接,以便您自行查看更新频率.

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


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

  • PyInstaller:

    • 链接:网站 || 回购 || 的PyPI
    • 支持:Windows 2.7,Mac和Linux上的Python 2.7和Python 3.4 - 3.7.
  • cx_Freeze:

    • 链接: 网站 || 回购 || 的PyPI
    • 支持: Windows,Mac和Linux上的Python 2.7和3.5 - 3.7(?).
  • pyapp:

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

注意:此帖的先前版本包括py2exe(repo)和bbfreeze(repo)的注释.这两个项目都已从这个列表中删除了:他们几年来看到几乎没有活动,似乎完全没有维护.请参阅旧写入的编辑历史记录.


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

  • pynsist:

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

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

  • Nuitka:

    • 链接: 网站 || 回购(Github镜子) || 的PyPI
    • 支持: Windows,Mac和Linux上的Python 2.6 - 2.7和Python 3.3 - 3.7.
    • 其他说明: Nuitka将逐字编译您的Python代码并生成一个exe(而不是其他项目,只包括Python)来尝试加速您的代码.作为副作用,您还将获得一个可以分发的方便的exe.请注意,您需要在系统上使用C++编译器.
  • 用Cython:

    • 链接: 网站 || 回购 || 的PyPI
    • 支持: Windows,Mac和Linux上的Python 2.6 - 2.7和Python 3.2 - 3.7(?).
    • 其他说明: Cython类似于Nuitka,因为它是一个Python编译器.但是,它不是直接编译代码,而是将其编译为C.然后,您可以使用该C代码并将代码转换为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,然后是"冻结"风格的程序.

最后要注意的是,如果您只想支持Linux,您可能需要考虑为您的软件包创建一个发行版软件包,而不是将其转换为可执行文件.可以帮助您完成此操作的列表工具超出了本文的范围,但如果您决定探索此路线,这里有一些阅读材料.


jte*_*ace 10

pyinstaller仍在积极开发中.您可以在GitHub上看到最新的更改.

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

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

它支持Python版本2.6和2.7.它不支持Python 3,但有一个实验性的Python 3分支.

更新

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


小智 9

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

安装后只需输入auto-py-to-exe终端或命令提示符。

自动py到exe