执行模型变体——冻结的二进制文件 | 第一部分 开始 —— 第 2 章: python 是如何运行程序的 |《学习 python:强大的面向对象编程(第 5 版)》| python 技术论坛-大发黄金版app下载
有时当人们要求一个“真实的”python 编译器时,他们真正寻找的只是从 python 程序生成独立二进制可执行文件的一种方法。这更多是一个打包和发布的主意而不是一个执行流的概念,但有一些关联。在网上获取的第三方工具的帮助下,将 python 程序转换为真正的可执行文件(在 python 世界中被称作冻结的二进制文件)是可能的。这些程序不需要 python 的安装也可以运行。
冻结的二进制文件将程序文件中的字节码,以及 pvm(解释器)和程序需要的任何 python 支持文件打包为一个单独的包。关于这个主题有一些变体,但最终结果是一个单独的二进制可执行程序(比如,在 windows 上的 .exe 文件),它能轻松发送给客户。在图 2-2 中,似乎最右边的两个气泡——字节码和 pvm——被合并为一个单独组件:一个冻结的二进制文件。
今天,许多系统可以产生冻结的二进制文件,它们的平台和功能都有所不同: py2exe 只在 windows 上,但有广泛的 windows 支持;pyinstaller,类似于 py2exe 但也在 linux 和 mac osx 上工作且能产生自安装的二进制文件;py2app 用来创建 mac os x 应用程序; 原来的工具,freeze;和 cx_freeze,它提供了 python3.x 和跨平台支持。你可能不得不单独获取这些工具,而不能直接从 python 本身的发行版中获得,但它们都是免费可得的。
这些工具也在持续进化,所以参考 或你最爱的 web 搜索引擎来获取更多细节和状态。给你一个这些系统范围的概念:py2exe 能冻结使用 tkinter, pmw, wxpython 和 pygtk gui 库的独立程序;使用 pygame 游戏编程工具箱的程序;win32com 客户端程序;等等。
冻结的二进制文件和一个真正的编译器的输出不同——它们通过虚拟机运行字节码。因此,除了可能的启动改进,冻结的二进制文件和原始源文件运行得一样快。冻结的二进制文件通常不小(包含 pvm),但按目前的标准,它们通常也不大。然而,因为 python 嵌入在冻结的二进制文件中,它在运行程序的接收端是不需要安装的。而且,因为代码嵌入在冻结的二进制文件中,会更有效地隐藏于接收文件的人。
这个单一文件打包方案对商业软件的开发者特别有吸引力。比如,一个用 python 编码的基于 tkinter 工具箱的用户界面程序可以被冻结为一个可执行文件且作为 cd 或 web 上的自包含程序被分发。终端用户不需要安装(或甚至不需要知道)python 来运行分发的程序。