【Python学习手册(第四版)】学习笔记03.3-简述Python的嵌入式应用及冻结二进制(Frozen Binary)启动

首先为什么选择这本书,国内外网上教程一大堆,可能是一方面大家都在说国内外教材自学、编写水平等差异较大,另一方面算是个人复习吧,也想见识一下对比之前学习的内容,这本书有什么出彩的地方。个人总结难免疏漏,请多包涵。更多内容请查看原文。本文以及学习笔记系列仅用于个人学习交流。


目录

嵌入式调用

冻结二进制(Frozen Binary)


嵌入式调用

这里只做简述,需要详细嵌入式应用的推荐其他资料。

在一些特定的领域,Python代码也许会在一个封闭的系统中运行。在这样的情况下,我们说Python程序被嵌入在其他程序中运行。

Python代码可以保存到一个文本文件中、存储在数据库中、从一个HTML页面获取、从XML文件解析等。但是从执行的角度来看,另一个系统(而不是你)会告诉Python去运行你创建的代码。

这样的嵌入执行模式一般用来支持终端用户定制的。

例如,一个游戏程序,也许允许用户进行游戏定制(及时地在策略点存取Python代码)。用户可以提供或修改Python代码来定制这种系统。由于Python代码是解释性的,不必重新编译整个系统以融入修改。

在这种方式下,当使用Jython系统的时候,运行你的代码的封闭的系统可能是使用C、C++或者甚至Java编写的。例如,从C程序中通过调用Python运行API(Python在机器上编译时创建的由库输出的一系列服务)的函数创建并运行Python代码是可行的:

C代码片段中,用C语言编写的程序通过连接Python解释器的库嵌入了Python解释器,并传递给Python解释器一行Python赋值语句字符串去运行。C程序也可以通过使用其他的Python API工具获取Python的对象,并处理或执行它们。

《Programming Python》(O'Reilly)来了解在C/C++中嵌入Python的细节。嵌入式API可以直接调用Python函数、加载模块等。此外,Jython系统可让Java程序使用基于Java的API(Python解释器类)来启用Python程序代码。


这里不介绍Python/C集成,但是按照你的组织打算使用Python的方式决定是否在C、C++甚至是java上执行你创建的Python程序。

不管怎样,你仍将很有可能使用这里介绍过的交互和基于文件的启动技术去测试代码,那些被隔离在这些封闭系统中并最终有可能被这些系统使用的代码。


冻结二进制(Frozen Binary)

通过从网络上获得的一些第三方工具,将Python程序转为可执行程序(在Python世界中称作冻结二进制文件,Frozen Binary)是有可能的。

冻结二进制的可执行性是集成了程序的字节码以及Python解释器为一个单个的可执行程序的包。

通过这种方式,Python程序可以像其他启动的任何可执行程序一样(图标点击,命令行等)被启动。

尽管这个选择对于产品的发售相当适合,但它并不是一个在程序开发阶段适宜使用的选择。一般是在发售前进行封装(在开发完成之后)。

对商业软件的开发者来说,单文件封装的构架特别有吸引力。例如,一个Python编码的基于tkinter工具包的用户界面可以封装成一个可执行文件,并且可以作为一个CD中或网络上的独立程序进行发售。终端用户无需安装(甚至没有必要知道)Python去运行这些发售的程序。

如今,主要有三种系统能够生成冻结二进制文件:py2exe(Windows下使用)、PyInstaller(和py2exe类似,它能够在Linux及UNIX上使用,并且能够生成自安装的二进制文件)以及freeze(最初始的版本)。

例如py2exe可以封装使用了tkinter、PMW、wxPython和PyGTK GUI库的独立程序;应用pygame进行游戏编程的程序;win32com客户端的程序等。

冻结二进制文件与真实的编译输出结果有所不同:它们通过虚拟机运行字节码。因此,如果离开了必要的初始改进,冻结二进制文件和最初的源代码程序运行速度完全相同。

冻结二进制文件并不小(包括PVM),但是以目前的标准来衡量,它们的文件也不是特别的大。因为在冻结二进制文件中嵌入了Python,接收端并不需要安装Python来运行这些冻结二进制文件。此外,由于代码嵌入在冻结二进制代码之中,对于接收者来说,代码都是隐藏起来的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兴焉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值