`__pycache__` 是什么
2024-09-22 20:37:34
为了提高模块加载的速度,每个模块都会在 __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
文件。
最新文章
- Html/Css(新手入门第三篇)
- html+css—two
- pure virtual、impure virtual、non-virtual函数的接口继承和实现继承
- js打开新窗口的两种方式
- WM_DRAWITEM与DrawItem()的讨论(自绘)
- 「ZJOI2016」解题报告
- wxWidgets与其它GUI工具库比较
- is interest important?
- Mysql ACID与隔离级别
- CSS 布局:40个教程、技巧、例子和最佳实践
- 你的Android不好用,都是因为这几点原因
- 关于Unity中UI中的Mask组件、Text组件和布局
- Alpha发布——视频博客
- The Startup Manager FAQ
- Spring jdbcTemplate RowMapper绑定任意对象
- Linux 切换字符界面和图形界面
- Windows10系统可以禁止的服务(按名称排序)
- OpenCV打开摄像头失败
- DOM基础及DOM操作HTML
- D3.js 整体展示篇
热门文章
- jq的图片放大镜效果
- form:select form:options 标签数据回显
- Win7 32位安装Oracle11g R2 图解示例
- Idea工具常用技巧总结
- Selenium/HtmlUnit设置代理获取JS生成的网页
- Java面试中常问的Spring方面问题(涵盖七大方向共55道题,含答案)
- 2017ACM暑期多校联合训练 - Team 8 1011 HDU 6143 Killer Names (容斥+排列组合,dp+整数快速幂)
- Mac 10.9x下安装配置phonegap3.0开发环境 (涉及android sdk配置)
- Java多线程学习(七)并发编程中一些问题
- ECharts图表tooltip显示时超出canvas图层解决方法