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

转载于:https://www.cnblogs.com/LaoYuanPython/p/11087718.html

第6章 Python中的动态可执行方法 第6.1节 Python代码编译相关推荐

  1. python中numpy模块的around方法_Python numpy.around()用法及代码示例

    numpy.around(arr,decimals = 0,out = None):此数学函数可帮助用户将数组元素平均舍入为给定的小数位数. 参数: array :[数组]输入数组. decimal ...

  2. 在Python中操作文件之truncate()方法的使用教程

    在Python中操作文件之truncate()方法的使用教程 这篇文章主要介绍了在Python中操作文件之truncate()方法的使用教程,是Python入门学习中的基础知识,需要的朋友可以参考下 ...

  3. Python中optionParser模块的使用方法实例教程

    Python中optionParser模块的使用方法实例教程 转载  2014-08-29   投稿:shichen2014    我要评论 这篇文章主要介绍了Python中optionParser模 ...

  4. chatgpt赋能python:Python中quit()命令的使用方法和注意事项

    Python中quit()命令的使用方法和注意事项 在Python中,quit()函数是一个非常重要的命令,它被用于退出命令行或交互式Python环境.当你想要结束Python程序或退出Python交 ...

  5. 在Python中检查类型的规范方法是什么?

    检查给定对象是否为给定类型的最佳方法是什么? 如何检查对象是否从给定类型继承? 假设我有一个对象o . 如何检查是否为str ? #1楼 前往雨果: 您可能是说list而不是array ,但这指向类型 ...

  6. python中常见的流程结构-【Python2】04、Python程序控制结构

    一.python的表达式和语句 1.表达式 "某事", 1个或多个操作数,和0个以上的操作符组成的序列就是表达式 2.语句 "做某事" 程序执行的操作都是语句来 ...

  7. python文件处理seek()方法的参数是,在Python中操作文件之seek()方法的使用教程

    在Python中操作文件之seek()方法的使用教程 seek()方法在偏移设定该文件的当前位置.参数是可选的,默认为0,这意味着绝对的文件定位,它的值如果是1,这意味着寻求相对于当前位置,2表示相对 ...

  8. Python中的静态类变量和方法

    问: 如何在 Python 中创建静态类变量或方法? 答1: huntsbot.com聚合了超过10+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效. 在类定义内但不在方法内声明的变量是 ...

  9. 在Python中连接字符串的首选方法是什么?

    本文翻译自:Which is the preferred way to concatenate a string in Python? Since Python's string can't be c ...

最新文章

  1. visual studio输入法打不了中文_目前比较满意的手机输入法方案:Gboard + 搜狗词库...
  2. React上下文-Context
  3. if中加return_答应我,别再 if/else 走天下了可以吗?
  4. Android热修复升级探索——SO库修复方案 1
  5. VTK:几何对象之CylinderExample
  6. [js] ajax请求地址只支持http/https吗?能做到让它支持rtmp://等其它自定义协议吗 ?
  7. 外设单独编址与统一编址
  8. 明晰 | Java序列化与反序列化
  9. java学习日记(9)———socket,网络编程的学习
  10. linux c++模拟简易网络爬虫
  11. 在DC中误删除ISA计算机后无法连接ISA配置服务器问题
  12. java设计模式(八) 适配器模式
  13. RIP-OSPF-EIGRP 相互再发布
  14. 计算机中的PS颜色填充快捷键,ps颜色填充快捷键是什么
  15. MCSkin3D我的世界皮肤制作器 中文补丁
  16. 李宏毅:1 天搞懂深度学习,我总结了 300 页 PPT(附思维导图)
  17. 110道 Redis面试题及答案 (持续更新)
  18. 埃加洛尔虚拟服务器,致我终将逝去的二区:新一轮大服务器实装
  19. PLC从业人员的发展方向
  20. html背景颜色渐变代码

热门文章

  1. layer框架的用法
  2. Multi-Channel
  3. 2018届新高考志愿填报攻略
  4. Android 超简洁的视频播放器推荐 ArtPlayer
  5. python函数指针
  6. 原创C# Winform+DevExpress皮肤框架
  7. IK分词原理深度解析
  8. 增强版!如何深度学习识别滑动验证码缺口
  9. 訾博 2021年8月16日 周一 雨 芹菜火腿刀削面
  10. 数字信号处理--基于MATLAB的小波去噪算法--小波变换在信号降噪和压缩中的应用