Q:为什么我的Python项目下总有一个__pycache__文件?
Q:它到底是什么?
Q:又有什么用呢?

这是很多同学问我的一个问题,今天我们就来详细解释一下。
__pycache__从这个单词的意思我们就能猜测出它是python的缓存文件。那么缓存的什么内容?我们可以打开看一下。发现这里存储的都是后缀为.pyc的文件。
.pyc 文件是 编译后的字节码文件(Bytecode)。你可以会发出疑问了,
python不是动态编程语言吗? 不是不需要我们编译吗?
对的,python是动态编程语言,但是它和所有编程语言一样,都需要编译成计算机能运行的字节码。只是说,Python 解释器在执行 .py 文件时自动生成,而不需要我们人为地编译。
__pycache__文件中存放的.pyc 文件就是 编译后的字节码文件(Bytecode)。例如这里“A.cpython-311.pyc”就表示这个A文件经过cpython3.11编译后生成的字节码。
Q:那么这个pychache文件是这么生成的呢?
Q:为什么有一些python项目中存在,而有一些却没有呢?
只有当 Python 解释器需要缓存模块的编译结果时,才会生成 __pycache__ 文件夹。也就是说,触发点在于 “import” 操作。
下面来举例说明。我们的目录结构如下:
project/
├── main.py
└── utils.py
其中main.py文件内容如下:
from utils import sum
total = sum()
print(total)
执行:
python main.py
此时会在项目目录下会生成:
__pycache__
--| utils.cpython-311.pyc
✅ 注意: 这里只会为 utils.py 生成 .pyc,不会为 main.py 生成,因为 main.py 是“主脚本”,不是被 import 的模块。
我们用一张流程图来看下什么情况下生成了pychache文件。

从上面的流程图我们可以看出,当pychache文件夹中已经存在编译后的.pyc文件时,下次导入时就不需要再重复编译,这样就加快启动速度。这就是它的优势。
📢:小伙伴需要注意的是,在项目中,.pyc 文件可以放心删除(运行时会重新生成)。通常使用git版本控制时,会在 .gitignore 里加上,不要上传相应缓存文件。
__pycache__/
*.pyc


