我想从我的Python项目中创建一个可执行文件。用户应该能够在不需要安装Python的情况下下载并运行它。如果我只是分发一个包,我可以使用pip,wheel和PyPI来构建和分发它,但这需要用户拥有Python并知道如何安装包。我可以用什么来构建Python项目中的自包含可执行文件?
答案 0 :(得分:89)
这是一些常见的。除非明确指出,否则下面列出的所有项目都会在我上次编辑(2018年8月)时得到积极维护。
我还包括指向各自网站,回购和PyPi商家信息的链接,以便您自行查看更新频率。
另外,除非另有说明,否则下面列出的所有程序都将专门为其运行的操作系统生成一个exe。例如,在Windows中运行Pyinstaller会产生一个Windows exe,但在Linux中运行Pyinstaller会产生一个Linux exe。如果要为多个操作系统生成exe,则必须考虑使用虚拟机或使用Wine之类的内容。
以下程序的工作方式类似 - 它们将Python和您的程序捆绑在一起,有效地将它们组合在一起以生成可执行文件。
<强> PyInstaller:强>
cx_Freeze:
pyapp:
注意:此帖子的先前版本包括py2exe(repo)和bbfreeze(repo)的注释。这两个项目都已从此列表中删除:他们几年来几乎没有看到任何活动,看起来完全没有维护。请参阅旧文章的编辑历史记录。
当然,这不是唯一的做事方式:
<强> pynsist:强>
其他说明: Pynsist似乎支持将任意Python版本与您的应用程序捆绑在一起。但是,该工具本身需要运行Python 3.5+。
Pynsist将为您的程序创建一个Windows安装程序,它将直接在用户的计算机上安装Python,而不是将其与您的代码捆绑在一起,并创建链接到您的Python脚本的快捷方式。虽然此程序仅生成Windows安装程序,但您可以在Mac和Linux计算机上still run Pynsist。
<强> Nuitka:强>
<强>用Cython:强>
我个人喜欢使用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。
它支持所有三个主要平台:
它支持Python版本2.6和2.7。它不支持Python 3,但有一个实验Python 3 branch。
从版本3.2.1开始,它支持Python 2.7,3.3-3.5
答案 2 :(得分:2)