在介绍动态可执行方法前,本节先介绍一下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的世界。
欢迎大家批评指正,谢谢大家关注!