当前位置: 首页 > news >正文

成为Python砖家(3): 何时产生字节码 .pyc 文件

好奇:.pyc和 __pycache__是啥?

你是否好奇,在某些 Python 工程中,当执行了 xxx.py脚本后,多出了 __pycache__目录?这个目录下存放的是一些 .pyc结尾的文件。
这些文件,叫做 python bytecode。 官方文档中是这样描述的:

在这里插入图片描述

在这里插入图片描述

继续好奇:何时产生 .pyc 文件?

当导入模块的时候,如果被导入的模块,未曾产生过 .pyc文件, 就会生成 .pyc文件。我们尝试写一个最简单的模块 hello, 它只提供 greet()函数,具体实现为:

hello/init.py: 内容为空

hello/hello.py:
def greet():print("hello world")

调用这个模块:main.py:

from hello import helloif __name__ == '__main__':hello.greet()

好,我们观察在第一次引入模块前、引入后,整个目录的变化:

在这里插入图片描述

可以看到, 在第一次导入了 hello模块(from hello import hello)后,hello模块的目录下生成了子目录 pycache, 里面包含两个 .pyc文件:
__init__.cpython-311.pyc
hello.cpython-311.pyc
再次好奇: Python 标准库的 .pyc 文件在哪里?
上一步我们看到,第一次导入 hello 模块后生成了 hello.cpython-311.pyc文件,其中 hello是模块名字。 那么显然, Python 标准库,比如 os, 应该有一个对应的 os.cpython-311.pyc文件。找找看?

cd /Users/zz/soft/miniconda3
find . -name "os.cpython-311.pyc"

进一步好奇:为什么 numpy 的 .pyc 出现了多次?

大概是为了缓存优化:

在这里插入图片描述

结论

对于自己写的 Python 模块,当它第一次被导入,就会在模块目录下生成 __pycache__目录,存放各个文件的 .pyc字节缓存文件。
而 Python 标准库、numpy等常见库,在安装的时候, 会顺带提供 .pyc文件,并且可能有多份。

Reference

file:///Users/zz/Documents/pydoc-zh-cn/python-3.12.5-docs-html/glossary.html#glossary


http://www.mrgr.cn/news/928.html

相关文章:

  • 群晖NAS本地搭建可远程交互的大型语言模型LLM聊天机器人
  • HarmonyOs透明弹窗(选择照片弹窗样式)
  • 微前端架构下的负载均衡实现:策略与技术
  • 【项目】Java文档搜索引擎测试报告
  • 域名注册查询方法
  • 一文读懂 服务器
  • JVM 类加载机制
  • JavaScript初级——对象和函数
  • 详细了解JavaScript中的原型链和继承机制
  • 我遇到的flutter问题以及答案(一)
  • windows调试ios记录
  • 深度学习--tensorflow/keras出现各种维度不匹配问题解决
  • STM32之MPU6050实战
  • MiniCPM-V: A GPT-4V Level MLLM on Your Phone论文阅读
  • 所生成项目的处理器架构“MSIL”与引用“***”的处理器架构“x86”不匹配。
  • Android 使用`layer-list`打造精美的背景
  • docker数据卷
  • Vue.js中的v-once指令:全面解析与应用指南
  • django之BaseSerializer
  • 王老师 linux c++ 通信架构 笔记(五)编译后生成的 nginx 可执行程序的启动