python compile
python是一种解释性的语言,但我们仍然可以对其编写的源码文件进行编译;常见的python程序有如下形式:
.py --python的源代码文件,程序内容可以用文本编辑器直接打开,代码可视
.pyc -- .py文件经过编译后产生的字节码文件,是二进制文件
.pyo -- .py文件经过优化后的执行文件
.pyd -- python的动态链接库文件
NOTE:对python文件进行编译优化,可以达到隐藏源代码的目的,同时提高了程序的加载速度,其运行速度不一定得到提高
(一)python命令参数
在编写完毕程序源码后,如何产生编译后的可执行文件呢?对于C语言来说,使用GCC工具,其强大的编译功能足以完 成;对于python来说,同样存在相关的编译模块,用于处理编译任务。首先,需要了解python指令的简易用法
#man
python
我们将看到python的常见使用形式:
参数 说明
-B 导入时不写.py[co]文件
-d 调试解释器的输出
-E 忽略PYTHON的相关环境变量(这些变量主要涉及一些库包的搜索路径的,类似PATH变量)
-m
module_name 要导入的模块名称
-O 对生成的字节码稍作优化(注:此参数是大写的英文字母O,不是零)
-OO 除了-O优化外,还会删除文档字符串(docstring)
-h 显示用法信息
-v 显示详细信息
-V 显示python版本信息
较常用到的参数有:-m -O -h
(二)编译python的模块
python中有2个模块(貌似我只知道2个,也许还有其他的)可以用于编译python程序:
py_compile --用于一次编译单个源文件
compileall --可一次性编译(指定目录下的)多个文件,这点儿从命名上就看出来了!
这里,我们给出将要用到的测试文件--test.py,其内容如下:
1)使用py_compile模块进行编译
#python -m py_compile test.py
执行完毕后,运行ls命令,即可看见编译后的产生的.pyc文件
其应该是调用了py_compile模块中的compile()方法对test.py进行编译的??(有待考证)
#python -O -m py_compile test.py
执行完以上命令,产生.pyo文件
2)使用compileall模块进行编译
这里额外加入一个测试文件--test2.py,其内容与test.py相同
执行命令如下:
#python -m compileall /root/Python
执行结果如上图所示,将当前目录/root/Python下的2个源程序都进行了编译
该模块可能是调用的compile_dir()方法实现的??(待考证)
同理,生成优化后的.pyo文件,执行如下:
#python -O -m compileall /root/Python
NOTE: 执行 #python -m py_compile test.py test2.py同样可实现对于2个文件的编译,但其主要区别并不在此!
这里使用一个pycompile.py的文件,来显示区别,其内容如下:
#python pycompile.py
执行以上的命令,即可生成.pyc文件
同理,使用compileall模块,compile.py:
如此,只需指定要编译的目录,该目录下的所有python源文件都会被编译生成.pyc文件
从上边大致可以看出pycompile与compileall模块的区别
NOTE: compileall模块下还有2个额外的方法--compile_file,compile_path
其中compileall.compile_file即与pycompile.compile效果相同,均为编译单个文件
更多信息参见:http://docs.python.org/2/library/py_compile.html#module-py_compile