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


87

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


我仍在用2.x(确切地说是2.7.2)编写,但可能会看到需要转移到3.x(如果模块和此类兼容),那么也需要解决方案。
ShadowFlame 2012年

请注意,包装会使问题诊断大大复杂化。不仅您(或pdb)无法轻松访问正在执行的文件,py2exe(其他用户不知道)不包含.py文件,因此您不会在堆栈跟踪中看到源代码行。
ivan_pozdeev

出于兴趣,我已经开始使用pyinstaller
ShadowFlame,

Answers:


114

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

我还提供了指向各自网站,存储库和PyPi列表的链接,以备您检查自己更新的频率。

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


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

  • PyInstaller:

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

    • 链接: 网站|| 回购|| 皮皮
    • 支持: Windows,Mac和Linux上的Python 2.7和3.5-3.8。
  • py2app:

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

注意:本文的早期版本包括py2exerepo)和bbfreeze repo)的文章。这两个项目都已从此列表中删除:它们几年来几乎没有活动,而且似乎完全没有维护。请参阅编辑历史记录中的旧文章。


当然,这不是唯一的处理方式:

  • pynsist:

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

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

  • 努伊特卡:

    • 链接: 网站|| 回购(Github镜像) || 皮皮
    • 支持: Windows,Mac和Linux上的Python 2.6-2.7和Python 3.3-3.7。
    • 其他说明: Nuitka将按字面意义编译您的Python代码并生成一个exe(与其他项目(仅包含Python)相反),以尝试加快您的代码的速度。作为副作用,您还将获得可以分发的便捷exe。注意,您的系统上需要有一个C ++编译器
  • cython:

    • 链接: 网站|| 回购||皮皮
    • 支持: Windows,Mac和Linux上的Python 2.6-2.7和Python 3.2-3.8。
    • 其他说明: Cython与Nuitka相似,因为它是Python编译器。但是,不是直接编译您的代码,而是将其编译为C。然后您可以使用该C代码并将您的代码转换为exe。您需要在系统上使用C编译器。

我个人偏爱使用PyInstaller,因为它是我最容易启动和运行的工具,旨在与各种流行的库(例如numpy或pygame)很好地兼容,并且与各种OS和Python版本具有很好的兼容性。

但是,我也已经使用cx_Freeze成功构建了各种exe文件,没有太多困难,因此您也应该考虑尝试该程序。

我还没有机会尝试Pynist,Nuitka或Cython,但它们似乎是非常有趣且创新的解决方案。如果您在使用第一组程序时遇到麻烦,可能值得尝试这三种程序中的一种。由于它们的工作原理与Pyinstaller / cx_freeze风格的程序根本不同,因此,在第一个组失败的奇怪情况下,它们可能会成功。

特别是,我认为pynist是避免完全分发代码的整个问题的好方法:Mac和Linux已经具有对Python的本机支持,仅在Windows上安装Python可能确实是最干净的解决方案。(缺点是现在您需要担心将多个版本的Python +安装库作为目标)。

Nuitka和Cython(据我有限的经验)似乎工作得很好。同样,我自己还没有对它们进行全面的测试,因此我的主要观察结果是,与“ freeze”风格的程序相比,它们生成exe的时间似乎更长。


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


1
请注意,您还需要你的包里面包括微软C ++再分发(又名msvcrxx.dll,这里xx是一个版本号),以.exe文件运行(或要求用户自行安装)。这是必须的,因为Python是使用Visual Studio在Windows上构建的。
2015年

因此,似乎所有的Python IDE(pycharm或pydev-eclipse插件)都尚未将可编译的单可执行功能集成到IDE本身中。那是对的吗?:-)
Nelda.techspires

如果您关心确保源代码安全,那么Cython可能是最好的选择,因为它可以编译C代码。通常,使用冻结技术的程序可以很容易地反编译。
马丁德拉富恩特

上面列出了PyInstaller支持Python 3.7。根据我的经验和pyinstaller.org上的描述,这是不正确的,其中指出“ PyInstaller可与Python 2.7和3.3-3.6一起使用”。
汤姆(Tom),

1
@Tom-经过更多的挖掘后,看起来pyinstaller本身确实支持Python 3.7,但他们尚未正式发布支持3.7的新版本。(例如,他们的github回购声明他们支持Python 3.7 +他们似乎没有与3.7相关的未解决问题,但PyPi上的pyinstaller的最新版本是2017年12月发布的)。因此,如果需要3.7支持,则可以尝试直接从源代码构建+安装pyinstaller,或者等到下一个版本。(或者,当然也可以使用其他程序)
Michael0x2a

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


2

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

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

自动执行


感谢您仍然在与该线程相同的线程上进行回复。看起来是一个了不起的发现,它确实简化了设置过程,并提供了实际使用的命令:D
ShadowFlame
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.