python pyc文件

news2025/2/27 8:13:20

参考自

What are pyc files in Python

和Python什么情况下会生成pyc文件? - 知乎

加上了我自己的理解

官方文档有这么解释

  • A program doesn't run any faster when it is read from a ‘.pyc’ or ‘.pyo’ file than when it is read from a ‘.py’ file; the only thing that's faster about ‘.pyc’ or ‘.pyo’files is the speed with which they are loaded.
  • 从'.pyc'或'.pyo'文件中读取的程序并不比从'.py'文件中读取的程序快;'.pyc'或'.pyo'文件唯一快的地方是它们的加载速度。
  • When a script is run by giving its name on the command line, the bytecode for the script is never written to a ‘.pyc’ or ‘.pyo’ file. Thus, the startup time of a script may be reduced by moving most of its code to a module and having a small bootstrap script that imports that module. It is also possible to name a ‘.pyc’ or ‘.pyo’file directly on the command line.
  • 当一个脚本通过在命令行上给出它的名字来运行时,该脚本的字节码不会被写入'.pyc'或'.pyo'文件中。因此,通过将脚本的大部分代码转移到一个模块中,并有一个导入该模块的小型引导脚本,可以减少脚本的启动时间。也可以直接在命令行上命名一个'.pyc'或'.pyo'文件。

在 Python 中,.pyc 文件是在导入或执行 Python 脚本时由 Python 解释器生成的编译字节码文件。.pyc 文件包含编译后的字节码,可以直接由解释器执行,而不需要每次运行脚本时都重新编译源代码。这可以加快脚本执行时间,尤其是对于大型脚本或模块。

具体流程

  • 完成模块的加载和链接;
  • 将源代码翻译为PyCodeObject对象(这货就是字节码),并将其写入内存当中(方便CPU读取,起到加速程序运行的作用);
  • 从上述内存空间中读取指令并执行;
  • 程序结束后,根据命令行调用情况(即运行程序的方式)决定是否将PyCodeObject写回硬盘当中(也就是直接复制到.pyc或.pyo文件中);
  • 之后若再次执行该脚本,则先检查本地是否有上述字节码文件。有则执行,否则重复上述步骤。

也就是.py文件->必须经过python解释器->pyc文件 才能被python虚拟机执行,只有pyc文件才能被运行,但有的文件并没有保存pyc,是因为将其从内存写入硬盘是一件耗费时间的事,python会选择性地保留pyc。

.pyc 文件是在导入 .py 文件时由 Python 解释器创建的(py文件只要运行就要创建pyc)。它们包含导入模块/程序的“已编译字节码”,因此如果 .pyc 比相应的 .py 更新,模块在每次导入前总会检查其字节码文件的修改时间是否与自身的一致,如果二者修改时间不一致,则认为要重新编译pyc文件若一致则可以在后续导入时跳过从源代码到字节码的“翻译”(因为这个过程只需完成一次)文件,从而加快启动速度一点。但它仍然被解释。一旦生成*.pyc 文件,就不需要*.py 文件,除非您编辑它(也就是py文件比pyc文件更新了)。

关于 .pyc 文件的要点

以下是有关 .pyc 文件的一些要点:

  • 导入或执行 Python 脚本时,Python 解释器会自动生成 .pyc 文件。
  • .pyc 文件与相应的 .py 文件的存储结构如下所示,.pyc 文件存储在__pycache__文件夹中,以sptr_cuda为例

 可以看到二者的修改时间确实是完全一样的。

  • 并且与 .py 文件具有相同的名称,只是扩展名为 .pyc 而不是 .py。
  • .pyc 文件特定于用于生成它们的 Python 版本。如果您尝试使用不同版本的 Python 运行 .pyc 文件,您可能会遇到错误或意外行为。
  • 当一个脚本通过在命令行上给出它的名字来运行时,该脚本的字节码不会被写入'.pyc'或'.pyo'文件中

  • 只有pyc文件没有py文件也是完全可以运行的(已测试)

 

.pyc 文件是如何生成的

以下是 .pyc 文件如何在 Python 中生成和使用的一些示例:

例子:

导入 Python 模块会生成一个 .pyc 文件:

# my_module.py 
def my_function(): 
    print("Hello, world!") 
# main.py 
import my_module 
 my_module.pyc file和main.py都会生成pyc,因为两个都要执行, 但 my_module.pyc会从内存导出到磁盘,供下次使用

例子:

如果 .pyc 文件已经存在并且是最新的,Python 将使用它而不是重新编译源代码:

# my_module.py 
def my_function(): 
    print("Hello, world!") 
# main.py 
import my_module 
# This will use the existing my_module.pyc file, if it is up-to-date

例子:

如果脚本或模块的源代码发生变化,Python 将重新编译字节码并生成一个新的 .pyc 文件:

# my_module.py 
def my_function(): 
    print("Hello, world!!!!!!!!!!!!!!!!!!!!!")
 # main.py 
import my_module 
# 
This will cause Python to recompile my_module.py and generate a new my_module.pyc file 
the next time main.py is run

通过使用 .pyc 文件,Python 可以避免每次运行脚本时重新编译相同源代码的开销。这可以导致更快的脚本执行时间和更有效地使用系统资源。但是,请务必记住,.pyc 文件特定于生成它们的 Python 版本,不应跨不同版本的 Python 使用。

关于优化 .pyc 文件

如果使用 -O 选项运行 Python 脚本,将优化 .pyc 文件,生成pyo文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/426931.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C生万物 | 一探指针函数与函数指针的奥秘

文章目录一、指针函数1、定义2、示例二、函数指针1、概念理清2、如何调用函数指针&#xff1f;3、两道“有趣”的代码题O(∩_∩)O< 第一题 >< 第二题 >4、函数指针数组概念明细具体应用&#xff1a;转移表✔5、指向函数指针数组的指针三、实战训练 —— 回调函数1、…

Pix4D软件简易使用方法

一、实验目的 学习无人机处理软件 Pix4D 的各项基本功能模块&#xff0c;掌握处理无人机影像的一般处理流程及质量评价。学习新建项目&#xff0c;对图像进行初始化操作以便后处理。学会制作正射影像图&#xff0c;生成质量报告&#xff0c;并对其进行分析。 二、实验内容 &…

抽象轻松MySqL

第一步安装下载MySQL 手把手教你下载安装 第一步打开官方网站 这里提供两种——第一种懒人版&#xff1a;MySQL点击蓝色字会有链接 第二种手动版本&#xff1a;百度搜索Mysql&#xff08;注意不要点.cn的因为有点翻译问题&#xff09; 点开后的图如下 接下来开始装备下载 点…

Disentangled Graph Collaborative Filtering

代码地址&#xff1a;https://github.com/ xiangwang1223/disentangled_graph_collaborative_filtering Background&#xff1a; 现有模型在很大程度上以统一的方式对用户-物品关系进行建模(将模型看做黑盒&#xff0c;历史交互作为输入&#xff0c;Embedding作为输出。)&…

【C++进阶之路】初始C++

文章目录一.C的发展历史时代背景产生原因发型版本二.C的应用场景三.C 的学习成本C的难度C的学习阶段21天精通C的梗一.C的发展历史 时代背景 20世纪60年代——软件危机。部分原因:C语言等计算机语言是面向过程语言&#xff0c;在编写大型程序需要高度抽象与建模&#xff0c;此…

HTML中表格标签<table><tr><tb><th>中单元格的合并问题

前情知晓 层级关系如下&#xff1a; <table><tr><td> </td><th> </th></tr></table> <table>...</table> 用于定义一个表格开始和结束 <tr>...</tr> 定义一行标签&#xff0c;一组行标签内可以建立…

【前端】从零开始读懂Web3

序言 用心生活&#xff0c;用力向上&#xff0c;微笑前行&#xff0c;就是对生活最好的回馈。 本专栏说明&#xff1a; 主要是记录在分享知识的同时&#xff0c;不定时给大家送书的活动。 参与方式&#xff1a; 赠书数量&#xff1a;本次送书 3 本&#xff0c;评论区抽3位小伙伴…

Python进阶特性(类型标注)

1.4 Python进阶特性(类型标注) 1.4.1 类型标注介绍 Python属于动态类型语言&#xff0c;只有在运行代码的时候才能够知道变量类型&#xff0c;那么这样容易产生传入参数类型不一致的问题&#xff0c;导致出现意想不到的bug。这也是动态类型语言天生的一个问题。 所以在Python…

【Spring】— Spring中Bean的装配方式

Spring中Bean的装配方式Bean的装配方式1.基于XML的装配2.基于Annotation的装配3.自动装配Bean的装配方式 Bean的装配可以理解为依赖关系注入&#xff0c;Bean的装配方式即Bean依赖注入的方式。Spring容器支持多种形式的Bean装配方式&#xff0c;如基于XML的装配、基于Annotatio…

电力系统中针对状态估计的虚假数据注入攻击建模与对策(Matlab代码实现)

&#x1f352;&#x1f352;&#x1f352;欢迎关注&#x1f308;&#x1f308;&#x1f308; &#x1f4dd;个人主页&#xff1a;我爱Matlab &#x1f44d;点赞➕评论➕收藏 养成习惯&#xff08;一键三连&#xff09;&#x1f33b;&#x1f33b;&#x1f33b; &#x1f34c;希…

免费部署属于自己的chatGPT网站,欢迎大家试玩

最近我发现了一个非常nice的部署网站的工具&#xff0c; railway&#xff0c;这个网站是国外的&#xff0c;所以部署出来的项目域名是国外的&#xff0c;并不需要担心封号&#xff0c;也不需要进行域名注册&#xff0c;部署成功之后会自动生成域名&#xff0c;在国内就能够正常…

[NSSRound#11] 密码学个人赛

这个比赛没有参加,跟别人要了些数据跑一下,其实交互这东西基本上一样,跑通就行. ez_enc 这题有点骗人,给了一堆AB串,一开始以为是培根密码,结果出来很乱.再看长度:192 应该就是01替换 a ABAABBBAABABAABBABABAABBABAAAABBABABABAAABAAABBAABBBBABBABBABBABABABAABBAABBABAA…

“心机boy”马斯克:明面上呼吁暂停先进AI研发,背地里悄悄买1万块GPU推进大模型项目

来源: AI前线 微信号&#xff1a;ai-front 整理 | 冬梅、核子可乐 为了研发自家 AIGC&#xff0c; 马斯克狂买 GPU 并四处挖人 当地时间 4 月 11 日&#xff0c;据多家外媒报道&#xff0c;尽管高调建议在整个行业范围内停止 AI 训练&#xff0c;但伊隆马斯克本人倒是在 T…

VMware:安装centos7

环境&#xff1a; 准备好VMware软件 准备好centos镜像 如有需要 寻找镜像&&真机安装&&真机安装时候找不到硬盘 可以查看 &#xff1a; linux&#xff1a;真机安装centos linux&#xff08;突发事件&#xff1a;解决卡在安装界面&#xff09;{寻找镜像--u…

springboot+vue简历系统(源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的简历系统简历系统。项目源码请联系风歌&#xff0c;文末附上联系信息 。 目前有各类成品java毕设&#xff0c;需要请看文末联系方式 …

Excel中的表格批量生成word表格

场景&#xff1a;测试用例excel转word 我们在项目中&#xff0c;默认情况下是用我们的excel用例模版输出测试用例。但是有的项目中&#xff0c;会要求在word版本的测试计划或者测试报告中&#xff0c;写明测试用例。而我们的测试用例&#xff0c;有的项目有上千条&#xff0c;…

基于遥感的自然生态环境检测——实验一:SPOT全色影像正射纠正

实验流程 实验总流程如下图所示&#xff0c;主要包括四大步&#xff1a; &#xff08;1&#xff09;SPOT全色影像正射纠正&#xff1b; &#xff08;2&#xff09;多光谱与全色影像的配准和融合&#xff1b; &#xff08;3&#xff09;大气校正和生态因子提取&#xff1b; &am…

MathType+MicrosoftWord

MathTypeMicrosoftWordMathType的安装Microsoft WordMathType的安装 链接&#xff1a;https://pan.baidu.com/s/1bEd41GF-yRCRw2tb1XH8og?pwd1234 提取码&#xff1a;1234 语言选择英文&#xff01;&#xff01;&#xff01; 安装好之后&#xff0c;按win键&#xff0c;可以…

Springboot项目实战:一个依赖解决多平台OSS文件上传问题,以后就用这个 oss-spring-boot-starter

本文解决痛点。是否再不同项目需要不同的OSS二头疼。 A项目用七牛云&#xff0c;B项目使用阿里云。不想用七牛云了&#xff0c;还是改用华为云吧。同个项目使用不同的 bucketName 遇到这种种情况&#xff0c;本文提供一个依赖搞定多云OSS 适配问题 什么是OSS? 数据以对象&…

【UE 控件蓝图】菜单及功能实现

素材资源连接&#xff1a;百度网盘 请输入提取码 密码&#xff1a;fvcw 效果 步骤 1. 创建蓝图&#xff0c;父类为“HUD” 命名为“MainMenuHUD”并打开 在事件图表中添加如下节点&#xff1a; 2. 创建控件蓝图&#xff0c;命名为“MainMenuWidget” 此时在“MainMenuHUD”的…