Skip to main content

Python 入门基础知识 - 模块编译

Python 入门基础知识 - 模块编译

模块编译

在上一小结中,运行完usemodule.py我们会发现module目录中除了一个testmodule.py文件以外,

还多了一个testmodule.pyc文件。其中testmodule.pyc就是Python将testmodule.py编译成字节码的文件。

虽然Python是脚本语言,但Python可以将脚本编译成字节码的形式。对于模块而言,Python总是在第一次调用

后将其编译成字节码的形式,以提高脚本的运行速度。

Python在导入模块时会查找模块的字节码文件,如果存在,则将编译后的模块的修改时间同模块的修改时间比较。

如果两者的修改时间不相符,那么Python将重新编译模块,以保证两者内容相符。被编译的脚本也是可以直接运行的。

没有必要去刻意编译Python脚本,不过,由于Python是脚本,如果不想将源文件发布,可以发布编译后的脚本,这样可以

起到一定的保护作用。

对于不作为模块的脚本而言,Python不会在运行脚本后将其编译成字节码的形式。如果想将其编译成字节码,可以使用

compileall模块。

如下代码所示将上一节中的usemodule.py编译成".pyc"文件。

# file: base_practise.py
#
import py_compile
py_compile.compile('usemodule.py')

运行base_practise.py后,可以看到当前目录会多了一个usemodule.pyc的文件。运行usemodule.pyc后输入如下。

$ python usemodule.pyc
我是一个模块
testmodule.py
usemodule.py

可以看到其输出与上一节输出一样。编译后生成的usemodule.pyc并没有改变程序功能,只是以Python字节码的形式存在。

另外可以通过Python的命令行选项将脚本优化编译。Python编译的优化选项有以下两个。

-O: 该选项对脚本的优化不多,编译后的脚本以".pyo"为扩展名。

凡是以".pyo"为扩展名的Python字节码都是经过优化的。

-OO: 该选项对脚本优化的程度较大,编译后的脚本以".pyo"为扩展名。使用该标志可以是编译的Python脚本更小。

使用改选项可以导致脚本运行错误,因此,应该谨慎使用。

可以通过在命令行中输入以下命令将usemodule.py优化编译。

python -O -m py_compile usemodule.py
python -OO -m py_compile usemodule.py

实力环境说明

# _*_ coding: utf-8 -*-
# version 2.7.13
版权声明

版权声明

durban.zhang 创作并维护的 Walkerfree 博客采用 创作共用保留署名-非商业-禁止演绎4.0国际许可证。本文首发于 Walkerfree 博客(http://www.walkerfree.com/),版权所有,侵权必究。本文永久链接:http://www.walkerfree.com/article/45