从 Python 项目创建单个可执行文件[关闭]
- 2024-11-28 08:37:00
- admin 原创
- 183
问题描述:
我想从我的 Python 项目创建一个可执行文件。用户应该能够下载并运行它,而无需安装 Python。如果我只是分发一个包,我可以使用 pip、wheel 和 PyPI 来构建和分发它,但这要求用户拥有 Python 并知道如何安装包。我可以使用什么来从 Python 项目构建一个独立的可执行文件?
解决方案 1:
有几种不同的方法可以做到这一点。
第一种(也是最常见的)方法是使用“冻结”式程序。这些程序通过将 Python 和你的程序捆绑在一起来工作,本质上将它们组合成一个可执行文件:
Py安装程序:
网站||仓库|| PyPi
支持 Windows、Mac 和 Linux 上的 Python 3.7 - 3.10。
cx_冻结:
网站||仓库|| PyPi
支持 Windows、Mac 和 Linux 上的 Python 3.6 - 3.10。
py2exe:
网站||仓库|| PyPi
仅支持 Windows 上的 Python 3.7 - 3.10。
py2app:
网站||仓库|| PyPi
仅支持 Mac 上的 Python 3.6 - 3.10。
需要牢记的是,这些类型的程序通常只会为您运行的操作系统生成一个 exe。例如,在 Windows 中运行 Pyinstaller 将生成一个 Windows exe,但在 Linux 中运行 Pyinstaller 将生成一个 Linux exe。如果您想为多个操作系统生成一个 exe,则必须考虑使用虚拟机或 Wine 之类的东西。
当然,这不是唯一的做事方法:
pynsist:
网站||仓库|| PyPi
Pynsist 将为您的程序创建一个 Windows 安装程序,它将直接在用户的计算机上安装 Python,而不是将其与您的代码捆绑在一起,并创建链接到您的 Python 脚本的快捷方式。
pynsist 工具本身需要 Python 3.5+ 才能运行,但支持将任何版本的 Python 与您的程序捆绑在一起。
Pynsist 只会创建 Windows 安装程序,但可以从 Windows、Mac 和 Linux 运行。有关更多详细信息,请参阅其常见问题解答。
努伊特卡:
网站|| Repo(Github 镜像) || PyPi
Nuitka 会直接编译你的 Python 代码并生成一个 exe(与其他仅包含 Python 的项目不同),以尝试加快你的代码速度。作为副作用,你还会得到一个可以分发的方便的 exe。请注意,你的系统上需要有C++ 编译器。
在 Windows、Mac 和 Linux 上支持 Python 2.6 - 2.7 和 Python 3.3 - 3.10。
cython:
网站||仓库|| PyPi
Cython 与 Nuitka 类似,都是 Python 编译器。但是,它不会直接编译代码,而是将其编译为 C。然后,您可以将该 C 代码转换为 exe。您需要在系统上安装 C 编译器。
在 Windows、Mac 和 Linux 上支持 Python 2.7 和 Python 3.3 - 3.11。
我个人倾向于使用 PyInstaller,因为它对我来说是最容易启动和运行的,可以与各种流行的库(如 numpy 或 pygame)很好地配合使用,并且与各种操作系统和 Python 版本具有很好的兼容性。
不过,我也成功地使用 cx_Freeze 构建了各种 exe,而没有太多困难,所以您也应该考虑尝试该程序。
我还没有机会广泛尝试 pynist、Nuitka 或 Cython,但它们似乎是相当有趣和创新的解决方案。如果您在使用第一组程序时遇到麻烦,可能值得尝试这三个程序之一。由于它们的工作方式与 Pyinstaller/cx_freeze 风格的程序根本不同,它们可能会在第一组程序失败的那些奇怪的边缘情况下取得成功。
具体来说,我认为 pynist 是完全避免分发代码问题的好方法:Mac 和 Linux 已经对 Python 提供本机支持,在 Windows 上安装 Python 可能确实是最干净的解决方案。(缺点是现在您需要担心针对多个版本的 Python + 安装库)。
Nuitka 和 Cython(就我有限的经验而言)似乎运行得相当好。同样,我自己还没有对它们进行过广泛的测试,因此我的主要观察是它们似乎比“冻结”式程序花费更长的时间来生成 exe。
尽管如此,将 Python 程序转换为可执行文件不一定是分发代码的唯一方法。要了解有关其他可用选项的更多信息,请参阅以下链接:
https://packaging.python.org/overview/#packaging-python-applications
https://docs.python-guide.org/shipping/packaging/#for-linux-distributions
解决方案 2:
截至 2022 年 7 月,pyinstaller正在积极开发中。您可以在 GitHub 上查看最新更改。它支持 Windows、Linux 和 MacOS;32 位和 64 位。它支持 Python 版本 2.6、2.7 和 3.3+。
使用 pip 安装 PyInstaller:
pip install pyinstaller
转到程序的目录并运行:
pyinstaller -F script.py
在 dist 文件夹中找到 .exe。添加-F
参数会生成一个独立的 .exe。
解决方案 3:
auto-py-to-exe是 PyInstaller 的 GUI。