python--compile

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

原文地址:https://www.cnblogs.com/tesion99/p/learn-python003.html