第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:\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的世界。
欢迎大家批评指正,谢谢大家关注!
第6章 Python中的动态可执行方法 第6.1节 Python代码编译的更多相关文章
- 第6章 Python中的动态可执行方法目录
第6.1节 Python代码编译 第6.2节 Python特色的动态可执行方法简介 第6.3节 Python动态执行之动态编译的compile函数 第6.4节 Python动态表达式计算:eval函数 ...
- 第6.2节 Python特色的动态可执行方法简介
一. 基本概念 动态可执行,是指在代码中通过外部输入或代码嵌入的常量字符串包含代码的方式提供Python代码,要求Python执行这些代码.这样就可以达到开放式运行的效果,提高程序的能力和灵活性 ...
- Python中optionParser模块的使用方法[转]
本文以实例形式较为详尽的讲述了Python中optionParser模块的使用方法,对于深入学习Python有很好的借鉴价值.分享给大家供大家参考之用.具体分析如下: 一般来说,Python中有两个内 ...
- 在Python中操作文件之truncate()方法的使用教程
在Python中操作文件之truncate()方法的使用教程 这篇文章主要介绍了在Python中操作文件之truncate()方法的使用教程,是Python入门学习中的基础知识,需要的朋友可以参考下 ...
- Python中的动态类
Python中的动态类 有这样一个需求,我有SegmentReader.PostagReader.ConllReader这三个Reader,他们都继承于一个Reader类.在程序运行中,由用户通过se ...
- Python中防止sql注入的方法详解
SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,甚至篡改数据库.下面这篇文章主要给大家介绍了关于Python中 ...
- python中的字典内置方法小结
#!/usr/local/bin/python3 # -*- coding:utf-8 -*- #key-value #dict 无序,无下标,不需要下标,因为有key stu={ 'stu001': ...
- python中文件操作的其他方法
前面介绍过Python中文件操作的一般方法,包括打开,写入,关闭.本文中介绍下python中关于文件操作的其他比较常用的一些方法. 首先创建一个文件poems: p=open('poems','r', ...
- python中验证码连通域分割的方法详解
python中验证码连通域分割的方法详解 这篇文章主要给大家介绍了关于python中验证码连通域分割的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用python具有一定的参考学习价值,需 ...
随机推荐
- apache+php安装
https://codebriefly.com/how-to-setup-apache-php-mysql-on-windows-10/ 出问题的地方 1.apache rewrite 模块开启 (去 ...
- JavaSE基础语法学习
标识符 表示类名的标识符用大写字母开始. 表示方法和变量的标识符用小写字母开始,后面的描述性词以大写开始. 注意 所有的标识符都应该以字母(A-Z 或者 a-z),美元符($).或者下划线(_)开始 ...
- Java字符串到数组的转换--最后放大招
本文是关于如何在Java中以不同方式将String转换为String Array的几种方法,按照惯例,文末会分享Groovy语言中的实现. split()方法 字符串api是通过split()方法添加 ...
- Docker学习笔记:在Windows7下安装
下载 DockerToolbox-19.03.1.exe 进行安装: 安装比较简单,双击运行,点下一步即可,可以勾选自己需要的组件: 安装成功后,桌边会出现三个图标,如下图所示: 点击 Docker ...
- 内网渗透 day7-linux信息收集
linux信息搜集 目录 1. linux信息搜集 2. nmap漏洞复现 3. msf linux模块反弹shell 1. linux信息搜集 id 查看当前用户的权限和所在的管理组 python ...
- 它是世界上最好的语言,吊打PHP那种
Scratch Scratch是麻省理工媒体实验室终身幼稚园组开发的一套电脑程序开发平台,旨在让程序设计语言初学者不需先学习语言语法便能设计产品.开发者期望通过学习Scratch,启发和激励用户在愉快 ...
- python 安装selenium首次运行错误selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PATH
问题原因: 没有安装相关的支撑driver https://npm.taobao.org/mirrors/chromedriver/ 下载对应的driver 放置到python路径下
- Android studio设置参数文档提示
方法/步骤 进行点击Android studio菜单中的file的选项菜单. 弹出了下拉菜单中进行选择为"settings"的选项的菜单即可. 进入到了settin ...
- 《Machine Learning in Action》—— 小朋友,快来玩啊,决策树呦
<Machine Learning in Action>-- 小朋友,快来玩啊,决策树呦 在上篇文章中,<Machine Learning in Action>-- Taoye ...
- 02、Hibernate开发步骤
1.创建Hibernate配置文件(hibernate.cfg.xml) <?xml version="1.0" encoding="UTF-8"?> ...