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

【Python】 Python 的编译执行过程 一切的起点,是我们用文本编辑器创建的文件。对于解释器来说,这首先是一个二进制的字节流。因此,它遇到的第一个问题就是:如何将这个字节流正确地解码为统一的、可理解的字符序列?Python 3的源文件默认使用编码。这是一个明智的默认选择,能够表示世界上几乎所有的字符,具有良好的兼容性。然而,为了确保最大的可移植性和避免任何潜在的歧义,最佳实践是在每个Python文件的顶部明确声明其编码格式。PEP 263 定义了编码声明的规则。这个声明必须出现在文件的前两行之内,并且必须匹配以下正则表达式: 这意味着,以下声明都 阅读详情

在介绍动态可执行方法前,本节先介绍一下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.youkuaiyun.com/LaoYuanPython)系列文章用于逐步介绍老猿学习Python后总结的学习经验,这些经验有助于没有接触过Python的程序员可以很容易地进入Python的世界。
欢迎大家批评指正,谢谢大家关注!

python:compileall --- 字节编译 Python 库 阅读详情

相关推荐

使用compileall模块编译Python的源代码

python源码文件编译为pyc文件

ithongchou的博客 895

python编译过程和执行原理

python编译过程和执行原理 (1)python执行原理 这里的解释执行是相对于编译执行而言的。我们都知道,使用C/C++之类的编译性语言编写的程序,是需要从源文件转换成计算机使用的机器语言,经过链接器链接之后形成了二进制的可执行文件。运行该程序的时候,就可以把二进制程序从硬盘载入到内存中并运行。 但是对于Python而言,python源码不需要编译成二进制代码,它可以直接从...

helloxiaozhe的博客 7万+

树莓派CM4 PCIe扩展方案与ASM1184e芯片应用

PCIe(Peripheral Component Interconnect Express)是计算机硬件中重要的高速串行总线标准,广泛应用于存储、网络等设备连接。其核心原理是通过差分信号实现高带宽传输,PCIe Gen2 x1的理论带宽可达5Gbps。在嵌入式开发中,PCIe扩展技术能有效解决单板计算机接口不足的问题,特别适合树莓派等微型平台。ASMedia ASM1184e作为PCIe交换芯片,可将单个接口扩展为多个,支持热插拔且免驱动,极大提升了工程灵活性。通过PCIe交换机方案,开发者能在树莓派CM

weixin_42602368的博客 421

python如何编译代码?

python如何编译代码?

xiangxue888的博客 8059

I2C通信协议SCL与SDA引脚特性:核心要点总结

深入讲解I2C通信协议中SCL和SDA引脚的工作机制与电气特性,帮助理解i2c通信协议的稳定传输原理,掌握上拉电阻配置与信号时序控制要点。

weixin_42103128的博客 2731

TouchGFX使用教程(三)

TouchGFX使用教程(三)界面事件控件修改方法图片等资源放置位置 界面事件 控件修改方法 图片等资源放置位置

yuanzhan11的专栏 6972

第6.2节 Python特色的动态可执行方法简介

一、 基本概念 动态可执行,是指在代码中通过外部输入或代码嵌入的常量字符串包含代码的方式提供Python代码,要求Python执行这些代码。这样就可以达到开放式运行的效果,提高程序的能力和灵活性。 动态可执行的方法带来方便和灵活性的同时,其实还是带来了安全性威胁。安全性威胁体现在两个方面: 1、 动态执行的代码可能改变原有代码的运行环境,导致出现异常的数据和执行结果。这个威胁可以通过名...

老猿Python 1920

编译原理考试大题分析【太原理工大学】

看完本篇大题拿 85% 的分应该没问题,TYUT 太原理工大学编译原理期末考试。

m0_52861684的博客 1万+

第6.3节 Python动态执行之动态编译的compile函数

Python支持动态代码主要三个函数,分别是compile、eval和exec。本节介绍compile函数的语法和相关使用。compile函数用来编译一段字符串的源码,将其编译为字节码或者AST(抽像语法树)。 一、 语法 compile个内置函数,语法如下: compile(source, filename, mode, flags=0, dont_inherit=False, opti...

老猿Python 5658

KingSCADA3.8保姆级安装教程

大家好,我是雷工!最近开始学习KingSCADA,今天这篇详细记录安装KingSCADA3.8的过程。首先下载需要的安装版本,此处以从官网下载的最新版本KingSCADA3.8为例,双击:Setup.exe;

做有价值的事,积累有价值的笔记! 1万+

Serial RapidIO Gen2 IP 说明(一)

概述 高速IO(RapidIO)互联架构,用来兼容当前最流行的集成通信处理器、主处理器、联网的数字信号处理器,是一种高性能、分组交换(报文交换)的互联技术。它解决了高性能嵌入式产业稳定性、高带宽以及系统内部更快的总线速率的需求。 高速IO(RapidIO)标准由三层定义:逻辑层、传输层、物理层。逻辑层定义了所有的协议内容和报文格式。这些是终端发起和完成一次传输所必需的信息。传输层提供了报文从一个端点传输到另外一个端点必要的路线信息。物理层则描述了设备级的端口声明,如报...

记录所学,分享知识,结识挚友 1497

第6章 Python中的动态可执行方法目录

第6.1节 Python代码编译 第6.2节 Python特色的动态可执行方法简介 第6.3节 Python动态执行之动态编译的compile函数 第6.4节 Python动态表达式计算:eval函数详述 第6.5节 exec函数:一个自说自话的强大Python动态编译器 第6.6节 Python动态执行小结 ...

老猿Python 1186

paddle 43 用onnxruntime实现ppyoloe模型的部署(含python和c++版本)

PP-YOLOE+是PP-YOLOE模型的升级版,PP-YOLOE+_l在COCO test-dev2017达到了53.3的mAP, 同时其速度在Tesla V100上达到了78.1 FPS。PP-YOLOE+_s/m/x同样具有卓越的精度速度性价比。paddle官方只给出了基于paddle框架的部署案例,为了更好的部署,为此实现将paddle模型转换为onnx模型,然后在python下实现onnxruntime部署。后续会补充c++ onnxruntime部署

a486259的博客 1914

python 动态编译代码_第6.3节 Python动态执行之动态编译的compile函数

Python支持动态代码主要三个函数,分别是compile、eval和exec。本节介绍compile函数的语法和相关使用。compile函数用来编译一段字符串的源码,将其编译为字节码或者AST(抽像语法树)。一、 语法compile个内置函数,语法如下:compile(source, filename, mode, flags=0, dont_inherit=False, optimize...

weixin_39673471的博客 247

利用Gretna软件计算脑网络的全局属性和局部属性指标

使用Gretna,你可以计算脑网络的全局属性指标(如网络特征、小世界性和模块度),以及局部属性指标(如节点度和聚类系数)。通过Gretna,你可以计算脑网络的稀疏度,并进一步探索网络的特征和特性。Gretna是一款基于MATLAB平台的脑网络分析工具,它提供了丰富的函数和工具箱,用于计算和分析脑网络的结构和功能。在脑网络中,较高的稀疏度可能意味着神经系统的高效性和信息处理能力,因为较少的连接可以降低信息传递的成本。连接矩阵是一个N*N的矩阵,其中N表示节点的数量,矩阵的每个元素表示节点之间的连接强度。

code_program481的博客 1808

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

gcc配合cython编译python源代码

这三行命令的整体作用是将一个 Python 脚本编译为一个 C 程序,并生成可执行文件main。首先,使用 Cython 将 Python 代码转换为 C 代码,然后编译该 C 代码为目标文件,最后链接目标文件生成可执行程序。这样可以提高执行效率,并允许在 C 程序中嵌入 Python 解释器。这两句命令的整体作用是将一个 Python 脚本编译为一个共享库 (model.so),以便可以在其他 C/C++ 程序中调用其中的 Python 函数和对象。

Neo 1580

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

第6.6节 Python动态执行小结

一、 Python动态执行支持通过输入数据流或文件传入Python源代码串,进行编译后执行,可以通过这种方式扩展Python程序的功能; 二、 动态执行方法可能导致恶意攻击,因此使用时需要限定使用范围,注意安全风险; 三、 如果采用先编译后动态执行的方式,注意编译模式必须与执行模式对应; 四、 动态执行可以指定代码的执行空间,动态执行最好在指定的全局名字空间和局部名字空间中...

老猿Python 2875

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

python 动态执行条件判断_第6.2节 Python特色的动态可执行方法简介

一、 基本概念动态可执行,是指在代码中通过外部输入或代码嵌入的常量字符串包含代码的方式提供Python代码,要求Python执行这些代码。这样就可以达到开放式运行的效果,提高程序的能力和灵活性。动态可执行的方法带来方便和灵活性的同时,其实还是带来了安全性威胁。安全性威胁体现在两个方面:1、 动态执行的代码可能改变原有代码的运行环境,导致出现异常的数据和执行结果。这个威胁可以通过名字空间...

weixin_39976951的博客 306

Python 中的动态编译(1) eval,exec,compile

有一些使用场景中希望将一定的编码能力交给用户决定,要么是做成配置形式或做成插件热加载,今天介绍一种更轻量级的实现方式——动态编译。 说到 python 的动态编译一般会想到 eval 函数、exec 函数、compile 函数。 以下是一个使用 eval 函数动态编译python代码的例子: lambda_code = """lambda x: str(x).zfill(5)""" fun...

killkill 1692

python语言继承6.3节例6-1中的person_第6.3节 Python动态执行之动态编译的compile函数...

Python支持动态代码主要三个函数,分别是compile、eval和exec。本节介绍compile函数的语法和相关使用。compile函数用来编译一段字符串的源码,将其编译为字节码或者AST(抽像语法树)。一、 语法compile个内置函数,语法如下:compile(source, filename, mode, flags=0, dont_inherit=False, optimize...

weixin_39845406的博客 208

第6.5节 exec函数:一个自说自话的强大Python动态编译器

在Python动态执行的函数中,exec是用于执行一个字符串内包含的Python源码或其编译后对应的字节码。 一、 语法 1. exec(Code, globals=None, locals=None) 2. 参数说明 本函数的参数与eval的参数及含义完全相同,不过第一个参数eval函数要求是表达式字符串或其编译的字节码,exec要求是Python语句或语句块或其编译的代码,如...

老猿Python 2085

chatgpt赋能python:Python编译成可执行文件:让你的代码更加优雅高效

Python是一种脚本语言,它的代码由解释器执行,也就是说,在运行代码时,Python解释器逐行改写代码,然后在运行它。然而,Python解释器是一种解释性语言,这意味着它在运行代码时需要实时进行解析,这限制了程序的执行速度和效率。此外,在开发过程中,Python程序需要依赖于安装正确的解释器和相关库来运行,这也带来了一定的不便。Python编译器会在源代码上执行一系列机器级的转换,并将转换后的代码打包到一个单独的文件中,这样可执行文件就可以独立于Python解释器运行。

「 虚幻私塾」 290
上一篇: 第5.5节 函数递归、嵌套及样例
下一篇: 第6.2节 Python特色的动态可执行方法简介
LaoYuanPython
LaoYuanPython 2020年博客之星Top3 2020年博客之星Top3 领域专家: Python技术领域 领域专家: Python技术领域
博客等级 码龄8年 15万+粉丝 1324原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LaoYuanPython

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值