当前位置: 首页 > 面试题库 >

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

安毅
2023-03-14
问题内容

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


问题答案:

这是一些常见的。除非明确指出,否则截至我上次编辑(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。

注意:本文的早期版本包括py2exe(repo)和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的时间似乎更长。



 类似资料:
  • 如何在一个项目中创建库和可执行文件?我只想在开发库的同时测试它,使用测试并不总是最好的方法。我认为我必须使用和,但我在crates.io中没有找到有关这方面的信息。

  • 问题内容: 伙计们,我的模块中有很多python代码,这些模块位于多个python软件包中,现在我需要创建一个包含所有这些文件的python可执行模块或文件,因此它将在Windows和Linux服务器上运行。有哪些可能的解决方案,以及如何解决? 问题答案: 这就是鸡蛋文件的用途。请阅读以下内容:将python库/应用程序打包为.egg文件有什么好处?

  • 问题内容: 我有一个具有多个主类的maven项目。我想从这些项目中生成可运行的Jar(包括所有依赖项)。我目前有以下构建配置(使用maven.assembly): 他们是否可以通过Maven-assembly实现这一目标?如果没有,实现目标的最简单方法是什么? 问题答案: 我无法以令人满意的方式解决此问题,因此我选择了其他解决方案。我使用了:

  • 我提取了一个包含xml、java类等的可执行jar文件。实际上,这个可执行jar文件是一个具有依赖关系的库。我需要修改这个库中一个类文件中的一行代码。我已经成功地编辑了类文件,现在我想把它重新打包到可执行的jar中。如何做到这一点。

  • 问题内容: 我以为我听说py2exe可以做到这一点,但我从来没有想过。有人成功做到了吗?我可以看到您的setup.py文件以及使用的哪些命令行选项吗? 基本上,我在考虑给它一个可执行文件,该文件执行诸如将自身解压缩到/ temp并运行的操作。 问题答案: 将创建一个没有依赖关系的.exe文件;使用该选项。它通过将所有需要的共享库打包到可执行文件中,然后在运行之前解压缩它们来完成此操作,正如你所描述

  • 问题内容: 我想创建一个jar文件来执行,该文件是使用java和clojure实现的。这是我采取的步骤。 使我的Java代码调用clojure代码 我可以生成一个具有clojure核心和我的clojure代码的jar文件(ThingOne-1.0.0-SNAPSHOT- standalone.jar),并且我还可以得到一个使用jar文件中使用clojure代码的类文件(HelloJava.clas