成为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 hello

if __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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

开源免费的表单收集系统TDuck

TDuck(填鸭表单)是一款开源免费的表单收集系统,它基于Apache 2.0协议开源,用户可以随时下载源码,自由修改和定制,也可以参与到项目的贡献和反馈中。TDuck表单系统不仅支持私有化部署,还提供了丰…

【IEEE独立出版】第四届人工智能、虚拟现实与可视化国际学术会议(AIVRV 2024)

第四届人工智能、虚拟现实与可视化国际学术会议(AIVRV 2024) 2024 4th International Conference on Artificial Intelligence, Virtual Reality and Visualization 会议时间:2024年11月1日-3日 会议地点:中国-南京…

在亚马逊云科技上提取视频内容并利用AI大模型开发视频内容问答服务

项目简介: 小李哥将继续每天介绍一个基于亚马逊云科技AWS云计算平台的全球前沿AI技术解决方案,帮助大家快速了解国际上最热门的云计算平台亚马逊云科技AWS AI最佳实践,并应用到自己的日常工作里。 本次介绍的是如何在亚马逊云科技上利用音视…

langchian 批次调用 prompt

目录 基础不使用批次 batch 批次调用 关于 langchian 额一些应用,可以查看案例: GitHub - 5zjk5/prompt-engineering: prompt 工程项目案例 基础不使用批次 from dotenv import load_dotenv import time import os from langchain_core.prompts imp…

Image-coloring的部署,在Ubuntu22.04系统下——点动科技

一、ubuntu22.04基本环境配置 1.1 更换清华Ubuntu镜像源 删除原来的文件 rm /etc/apt/sources.list开始编辑新文件 vim /etc/apt/sources.list先按i键,粘贴以下内容 # 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释 deb https:…

【体检】程序人生之健康检查,全身体检与预防疫苗,五大传染病普筛,基因检测等

程序员养生指南之 【体检】程序人生之健康检查,全身体检项目分类,五大传染病普筛,基因检测等 文章目录 一、全身体检与预防疫苗(年检)1、实验室检测:生化全套检查2、医技检查:辅助诊疗科室3、科…

【学习笔记】多元线性回归模型 —— Matlab

文章目录 前言一、多元线性回归多元线性回归模型线性模型 ( Y , X β , σ 2 I n ) (Y,X\beta,\sigma^2I_n) (Y,Xβ,σ2In​) 考虑的主要问题多元线性回归模型的参数估计多元线性回归模型和回归系数的检验 二、示例三、代码实现----Matlab1.多元回归的实现2.逐步回归的实现3.M…

MES系统:智能化排班排产的全面解决方案

MES(制造执行系统)管理系统通过集成多种先进技术、实时数据采集与分析、优化算法应用以及与其他系统的协同工作,实现了智能化排班排产功能。以下是该功能的详细实现方式: 数据集成与实时采集:MES系统与ERP、SCM、设备管…

Linux常用命令 ---- rmdir 命令[删除一个空目录]

rmdir 命令 功能:删除一个空目录 我们使用 mkdir 命令创建一个名为 test 空文件夹,如下图所示。 现在使用 rmdir 命令将 test 文件夹进行删除,如下图所示。 注意:rmdir 命令只能删除一个空目录,如果这个目录中有其他文…

python从入门到精通:函数

目录 1、函数介绍 2、函数的定义 3、函数的传入参数 4、函数的返回值 5、函数说明文档 6、函数的嵌套调用 7、变量的作用域 1、函数介绍 函数是组织好的,可重复使用的,用来实现特定功能的代码段。 name "zhangsan"; length len(nam…

【面试题系列Vue02】Vue Router 路由都有哪些模式?各模式之间有什么区别?

官方解析 Vue Router 路由有三种模式: hash 模式:使⽤ URL 中的 hash(即 # 后面的内容)来作为路由路径。 在这种模式下,页面不会重新加载,只会更新 hash 值,并触发路由变化,从而渲…

什么是机器人快换盘?

机器人快换盘,行业内也称作工具快换盘、换枪盘、快换工具盘、快速更换器、快换器、 快换夹具、治具快换等。是末端执行器快速更换装置(End-Of-Arm Tooling,简称EOAT),是工业自动化领域中用于机器人手臂上的一种重要设备…

【Python零基础】while循环和用户输入

文章目录 前言一、input()函数二、while循环三、使用while循环来处理列表和字典总结 前言 我们开发一个应用程序,目的都是为了解决最终用户的问题,针对用户界面输入的数据,按照用户期待的逻辑进行处理,得到用户想要的结果。本章将…

如何在前端测试中,在F12中加入token

不止是token,cookie中其他的数据也都可以这样 首先打开F12,然后找到Application或者应用程序 然后找到cookie里面双击这里,输入token或者其他数据就可以了,后面输值。

高性能日志系统

目录 设计思路 架构设计 设计模式应用 单例模式 工厂模式 建造者模式 代理模式 异步处理设计 异步日志器使用原因 异步日志器设计思路 异步日志器实现的核心模块说明 性能优化以及问题解决 测试结果 双缓冲区机制设计 设计思路及其架构 生产消费模式与双缓冲区结…

C++ wxWidgets图形界面开发用什么IDE最好?

在主流免费的IDE工具中,我们可以想到的支持cmake项目的工具就只有QtCreator,VisualStudio,VSCode这三个。其中QtCreator和VSCode支持WIndows,Mac,WIndows三大主流平台。但是VSCode在Ubuntu等系统下的支持并没有在WIndo…

【vue讲解:ref属性、动态组件、插槽、vue-cli创建项目、vue项目目录介绍、vue项目开发规范、es6导入导出语法】

0 ref属性&#xff08;组件间通信&#xff09; # 1 ref属性放在普通标签上<input type"text" v-model"name" ref"myinput">通过 this.$refs[myinput] 拿到的是 原生dom对象操作dom对象&#xff1a;改值&#xff0c;换属性。。。# 2 ref属…

Leetcode JAVA刷刷站(38)外观数列

一、题目概述 二、思路方向 为了解决这个问题&#xff0c;我们可以编写一个Java函数countAndSay&#xff0c;该函数接受一个整数n作为输入&#xff0c;并返回外观数列的第n个元素。这个函数将基于递归公式来构建数列&#xff0c;其中countAndSay(1) "1"&#xff0c;…

pycharm windows/mac 指定多版本python

一、背景 工作中经常会使用不同版本的包&#xff0c;如同时需要tf2和tf1&#xff0c;比较新的tf2需要更高的python版本才能安装&#xff0c;而像tf1.5 需要低版本的python 才能安装&#xff08;如 python3.6&#xff09;,所以需要同时安装多个版本。 二、安装多版本python py…

网络安全之XSS基础

从 XSS Payload 学习浏览器解码 xss payload 1.<a href"%6a%61%76%61%73%63%72%69%70%74:%61%6c%65%72%74%28%31%29">1</a> 2.<a href"&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;:…