首页 > 编程语言 >Python中 `__pycache__` 文件夹是什么?

Python中 `__pycache__` 文件夹是什么?

时间:2024-07-15 09:30:18浏览次数:9  
标签:__ pycache Python py 文件夹 模块

引言

当你编写一个独立的Python脚本时,目录结构看起来可能没什么特别。但随着项目逐渐变得复杂,你可能会倾向于将一些功能分离到其他模块或包中。这时,你可能会发现在源文件旁边,似乎毫无规律地,突然冒出一个__pycache__文件夹。

project/
│
├── mathematics/
│   │
│   ├── __pycache__/
│   │
│   ├── arithmetic/
│   │   ├── __init__.py
│   │   ├── add.py
│   │   └── sub.py
│   │
│   ├── geometry/
│   │   │
│   │   ├── __pycache__/
│   │   │
│   │   ├── __init__.py
│   │   └── shapes.py
│   │
│   └── __init__.py
│
└── calculator.py

请留意,当您的项目目录结构中有多级嵌套的子包时,pycache 文件夹可能会随机出现在不同的层级。与此同时,存放您 Python 源代码的其他包或文件夹,可能并没有这个神秘的缓存文件夹。

在您克隆了包含Python项目的远程Git仓库并执行了相应的代码之后,您可能会碰到相似的问题。究竟是什么触发了 pycache 文件夹的生成,它又有什么作用呢?

简而言之:它使导入 Python 模块更快

虽然 Python 属于解释型语言,但其解释器并不是直接执行您的 Python 代码,这样做效率会很低。实际上,当您执行一个 Python 脚本或导入模块时,解释器会先将您的源代码转换成字节码,这是一种代码的中间二进制形式。

这种字节码允许解释器省略掉一些重复的操作,比如每次执行程序时都重新进行词法分析、解析成抽象语法树以及验证代码的正确性。只要源代码保持不变,Python 就可以直接使用这个已经准备好的中间表示来执行,从而节省了时间,加快了脚本的启动速度。

要记住的是,通过 pycache 加载编译后的字节码确实可以加快 Python 模块的导入速度,但这并不会影响到模块的执行速度。

Python 利用项目中的 pycache 文件夹来存放已编译的模块字节码。当您再次运行程序时,如果这些字节码与源文件保持同步更新,解释器会尝试从这些文件夹中加载模块的预编译版本。需要指出的是,这种缓存机制仅在您通过代码导入模块时激活,而不是在命令行中直接执行脚本。

除了磁盘上的字节码缓存,Python 还维护了一个内存中的模块缓存,您可以通过 sys.modules 字典来访问。这确保了在您的程序中多次从不同位置导入同一个模块时,Python 会直接使用已导入的模块,无需再次加载或编译。这两种机制相辅相成,有效降低了导入 Python 模块所需的开销。

本文由mdnice多平台发布

标签:__,pycache,Python,py,文件夹,模块
From: https://www.cnblogs.com/swindler/p/18302455

相关文章

  • Theia 版 CCS 之 Delete 的工程去哪里了?
    当CCS左侧工程列表框达到一定数量时,为了方便观看,大部分人会选择在工程框里删除删除方式如下选中工程右键之后选择Delete最后选择OK你跟着我的步骤来了吗?那你就大错特错啦!等到你下次再打开这个工程的时候你会发现这个工程完全没有你编写的程序你写的程序不见了!!!那么你......
  • 最喜欢dp动态规划的一次(暑期刷题)
    以积极的态度面对生活,才能感受到人生的美好!dp动态规划-第一天前言1、环绕字符串中唯一的子字符串2、最长递增子序列3、摆动序列4、最长递增子序列的个数5、最长数对链6、最长定差子序列7、最长的斐波那契子序列的长度8、总结前言所有的问题可能不止一种方法,但是由......
  • 吉司机线段树
    吉司机线段树为了方便说板子,这里直接把板子题放上去讲了。线段树3简单说一下\(5\)个操作都在干什么:区间加一个数。区间和一个数取最小值。区间求和。区间求最大值。区间求历史最大值。好了,前\(4\)个操作如果单独拉出来出成一道题,显然是好做的,于是我们的......
  • 微服务是什么
    源文:微服务是什么微服务(MicroServices)最初是由MartinFowler于2014年发表的论文《MicroServices》中提出的名词,它一经提出就成为了技术圈的热门话题。 微服务,我们可以从字面上去理解,即“微小的服务”,下面我们从“服务”和“微小”两个方面进行介绍。1)所谓“服务......
  • SOMEIPSRV_SD_MESSAGE_14: 订阅事件组否定确认条目类型
    测试目的:验证SubscribeEventgroupNegativeAcknowledgment条目类型能够正确指示SubscribeEventgroup条目未被接受。描述测试将模拟一个客户端尝试订阅一个不存在的服务ID的事件组,并检查DUT(DeviceUnderTest,被测试设备)是否能够正确地返回一个SubscribeEventgroupNeg......
  • [HGAME 2023 week3]kunmusic wp
    今天写了一道Hgame的题,挺有意思的,写个blog记录一下下载附件得到三个文件,先用dnspy打开dll文件,找到main函数,发现为对资源中data的加密。因此将data直接dump下来,对其进行解密,并将解密后的文件保存为111,脚本如下:file=open(r'C:\Users\usr\Desktop\ctf题库\reverse\data','wb')f......
  • 明白了这点才能学好编程,否则参加什么培训班都没用
    首先要明确告诉你的是,在大学课堂或培训班学到的知识远远达不到企业开发的要求。如果你觉得大学毕业就应该找个好工作,培训班投入两三万RMB就应该找个1W以上的工作,对不起,你想多了。听听课就能找份月入七八千、甚至上万的工作,想想都不靠谱。有实力的培训班所谓的包就业就是安......
  • Spring框架--个人笔记
    1.什么是spring框架1.spring是一款开源框架,解决企业开发的复杂性。2.spring框架提供了三大核心思想:IOC、AOP、DIIOC:控制反转。创建对象并管理生命周期。AOP:面向切面编程。不改变源码对代码进行扩展。DI:依赖注入。3.spring框架特点:1.方便解耦,简化开发。2.AOP编程的支持-......
  • day03-Docker
    Docker实用篇javajdkmysqlmaven…0.学习目标什么是镜像?了解镜像操作(重点)容器操作(重点)数据卷操作(重点)查看、进入、操作文件、挂载自定义镜像(重点)集群部署微服务镜像仓库(了解)1.初识Docker1.1.什么是Docker微服务虽然具备各种各样的优势,但服务的拆分通用给部署带来......
  • 【Bean的作用域】
    1.Spring中bean的多种作用域在默认情况下,Spring应用上下文中所有的bean都是以单例(singleton)的形式创建的,即不管给定的一个bean被注入到其他bean多少次,每次所注入的都是同一个实例。Spring定义了多种作用域,可以基于这些作用域创建bean:单例(Singleton):在整个应用中,只创......