第6章 Python中的动态可执行方法 第6.1节 Python代码编译

在介绍动态可执行方法前,本节先介绍一下Python代码编译有关的知识,因为部分内容和动态执行有些关联。

一、    Python解释器的功能
Python虽然是解释型语言,但Python代码也是可编译的,编译源代码可以在一定程度上达到源代码产权保护、 防止用户篡改源代码、加载代码速度加快的目的。Python 解释器由一个编译器和一个虚拟机构成,编译器负责将源代码转换成字节码文件,而虚拟机负责执行字节码。Python可以对源代码直接通过解释器执行,也可以先编译成字节码再执行。Python编译并不是生成目标代码,编译实际上主要是进行语法分析,生成一个抽象语法树,然后转储成字节码形式,然后再通过虚拟机来逐行解释执行字节码。

二、    Python的文件类型
Python有以下几种类型的文件:
1.    py:Python源代码文件
2.    pyw:Python带用户界面的源代码文件
3.    pyx:Python包源文件;
4.    pyc:pyc是一种二进制字节码文件,是由py文件经过编译后生成的文件, pyc文件可跨平台使用, 由python的虚拟机来执行的,和Java中的class文件类似。pyc文件可提高Python解释器的加载速度,也可做简单的防源码泄露保护。pyc的内容与Python的版本相关,不同版本编译的pyc文件不同;
5.    pyo:Python优化后的字节码文件,pyo则是优化过后的字节码文件,不过pyo更像编译型语言里的中间文件。
6.    pyd:Python的库文件(Python版DLL)、在Linux上是so文件
从上面可以看到,py、pyw、pyx是源文件,pyc、pyo、pyd是编译后的文件,目前来说pyc和pyo文件都有反编译的方法,但pyd文件目前没有,从安全性来说,pyd文件较安全。

三、    常用编译命令介绍
1.    编译命令语法:python  –优化选项 –m 编译方法 [源文件列表或目录] 
2.    优化选项说明:
1)    -O,表示优化生成.pyo字节码,此时assert语句被删除,__debug__设置为false确保调试语句不执行
2)    –OO,除了-O相同的优化内容外,还会把代码里文档字符串也删除掉,达到最佳优化结果
3.    –m编译方法 选项,“编译方法”指调用哪个编译模块用于编译,Python内置有两种优化模块:py_compile和compileall,编译方法就可以用以上两种方法
4.    Python除了可以编译单个文件,还可以编译多个文件或整个目录,相关编译例子如下:
1)    python -m py_compile xxx.py:编译一个文件
2)    python -m compileall xxx.py xxx.py:编译2个文件,此时用py_compile也可以
3)    python -m compileall d:\python\src:编译一个目录下所有py文件 
4)    python  –O  -m compileall d:\python\src:增加优化级别,注意O为大写
5)    python  –OO  -m compileall d:\python\src

本节介绍了Python解释器与代码编译相关的知识和命令,内容比较简单,大家理解后就能上手。
老猿Python(https://blog.csdn.net/LaoYuanPython)系列文章用于逐步介绍老猿学习Python后总结的学习经验,这些经验有助于没有接触过Python的程序员可以很容易地进入Python的世界。
欢迎大家批评指正,谢谢大家关注!

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

LaoYuanPython

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

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

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

打赏作者

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

抵扣说明:

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

余额充值