zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    算法——排序方法总结(冒泡,快速,直接,希尔,堆,归并排序)
    C++函数调用之——值传递、指针传递、引用传递
    STM32(13)——SPI
    STM32(12)——CAN
    STM32(11)——DMA
    STM32(10)——窗口看门狗
    STM32(9)——通用定时器作为输入捕捉
    SRM32(8)——ADC和DAC
    WPF从入门到放弃系列第二章 XAML
    WPF从入门到放弃系列第一章 初识WPF
  • 原文地址:https://www.cnblogs.com/tesion99/p/learn-python003.html
Copyright © 2011-2022 走看看