Pyinstaller 和 Cx_Freeze 是做什么用的?
Pyinstaller 和 cx_Freeze 都是用于从 Python 脚本创建独立可执行文件的库。它们支持分发 Python 应用程序,而无需安装 Python 或对目标系统进行特定依赖项。这两个库都能够将脚本、依赖项和任何必要的数据文件打包到单个可执行文件中。
虽然他们的主要目标保持不变,但他们实现这一目标的方法以及所提供功能方面的其他细微差异是它们的不同之处。
Pyinstaller 和 cx_Freeze 是如何工作的?
PyInstaller 和 cx_Freeze 的工作原理是获取 Python 脚本并将其及其依赖项和任何必要的数据文件打包到一个独立的可执行文件中。它们都使用类似的过程来完成此操作:
- 分析 Python 脚本以确定它需要运行的依赖项。
- 将依赖项与 Python 解释器一起打包到可执行文件中。
- 创建可执行文件。
它们工作方式的主要区别在于这些步骤的实现细节。
PyInstaller 使用一种称为 “analysis” 的技术来确定脚本的依赖关系,这允许它只包含必要的模块,而不是整个 python 库。另一方面,cx_Freeze 使用一种称为 “包含” 的技术,它包括脚本可能使用的所有模块。这会使cx_Freeze可执行文件的大小大于 PyInstaller 创建的可执行文件。
Pyinstaller 与 Cx_Freeze 比较
在这里,我们将直接比较 cx_Freeze 和 Pyinstaller 以及各种重要的指标和基准测试。我还将介绍我与这两个库合作的个人经验,以帮助您更好地了解其中的区别。
注意:此处将经常使用术语 virtual environment。对于那些不知道的人来说,虚拟环境基本上是 Python 安装的新副本
Py安装程序 | Cx_Freeze | |
性能 | 性能与常规 Python 代码相似。 | 性能与常规 Python 代码相似。由于额外的导入和增加的大小,可能比 Pyinstaller 差一点。可以通过虚拟环境来解决。 |
大小 | 根据包含的库和设置的不同,差异很大。 | 根据包含的库和设置的不同,差异很大。没有适当排除额外的模块或使用虚拟环境 |
跨平台 | Windows、Linux、macOS。 | Windows、Linux、macOS。 |
加载时间 | 加载时间较长,尤其是单文件设置。对于大多数应用程序,大约需要 5 – 10 秒。我遇到过需要长达 15 秒的情况。 (这部分是 Windows 防火墙的故障,它使加载时间加倍) | 加载速度比 Pyinstaller 快得多。您可以预期大多数应用程序将在 5 秒内加载。 |
编译时 | 编译时间与库的数量成正比。平均不超过 5 分钟。 | 根据库的数量有很大差异。可能需要几分钟到几个小时(如果使用大型库)。 |
社区 | Pyinstaller 比 Pyinstaller 更受欢迎和更广泛使用cx_Freeze。提供许多在线资源和用户生成的内容。 | 在 Python 社区中广为人知并经常使用,但不如 Pyinstaller 多。 |
开箱即用 | Pyinstaller 几乎总是“开箱即用”地工作。成功编译所需的自定义或调整较少。 | Cx_Freeze 恰恰相反。它几乎总是不会开箱即用。它需要在这里和那里进行轻微调整才能使其正常工作。不过,这些修复程序有很好的文档记录,并且只需一分钟即可实现。 |
特征 | Pyinstaller 提供了更多功能和自定义选项。例如,有一个用于 Pyinstaller 的 GUI 界面,您可以制作启动画面、onefile 模式、更好的压缩支持 (UPX) 等。 | 功能和自定义数量较少。 |
cx_Freeze 与 Pyinstaller – 结论
总之,cx_Freeze 和 PyInstaller 都是将 Python 脚本转换为可执行文件的强大工具。Cx_Freeze 具有更快的加载时间,而 PyInstaller 提供了更多功能,例如支持单文件可执行文件、UPX 压缩、GUI 界面等。
两者之间的选择最终取决于项目的具体需求。对于需要更快加载时间的项目,cx_Freeze 可能是更好的选择。另一方面,如果项目需要更高级的功能(或 cx_freeze 没有的某个功能),PyInstaller 可能是更合适的选择。