• 第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:pythonsrc:编译一个目录下所有py文件 
    4)    python  –O  -m compileall d:pythonsrc:增加优化级别,注意O为大写
    5)    python  –OO  -m compileall d:pythonsrc

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

  • 相关阅读:
    【资源分享】一个匿名文件分享网站
    【C语言】指针到底有什么用
    【C语言】一招搞定C语言各种复杂指针
    【资源分享】Visual Studio全版本在线安装包(5MB)
    【资源分享】C语言也能干大事(第二版)
    【资源分享】迅雷
    Nuxt spa deploy
    nginx ssl docker
    Linux查看环境变量
    Nginx 配置
  • 原文地址:https://www.cnblogs.com/LaoYuanPython/p/11087718.html
Copyright © 2020-2023  润新知