`__pycache__` 是什么

为了提高模块加载的速度,每个模块都会在 __pycache__ 文件夹中放置该模块的预编译模块,命名为 module.version.pyc, version 是模块的预编译版本编码,一般都包含 Python 的版本号。例如在 CPython 发行版 3.4 中,fibo.py 文件的预编译文件就是:__pycache__/fibo.cpython-34.pyc。这种命名规则可以保证不同版本的模块和不同版本的 python 编译器的预编译模块可以共存。

脚本在运行之前会首先检查 python 文件的最后编辑日期和预编译模块的编译时间,从而决定是否需要重新编译。预编译模块也是跨平台的,所以不同的模块是可以在不同的系统和不同的架构之间共享的。

Python 在两种情况下不检查缓存。第一种,从命令行中直接加载的模块总是会重新编译并且结果不保存。第二种,如果没有源模块,则不会检查缓存。为了支持无源代码的部署方式,应该将预编译模块放在源代码文件夹中而不是 __pycache__ 中,并且不要包含源代码模块。

你可以使用 -O-OO 参数来降低预编译模块的大小。-O 开关会去除 assert 语句,-OO 开关会去除 assert 语句和 __doc__ 字符串。因为有些模块要依赖这些语句,因此只有当你确认模块的内容时才去使用这些开关。优化模块的后缀名是 .pyo

.pyo.pyc 文件的执行速度不会比 .py 文件快,快的地方在于模块加载的速度。
compileall 模块可以用来把某个文件夹的中的所有文件都编译成为 .pyc 或者 .pyo 文件。

探寻有趣之事!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值