为了提高模块加载的速度,每个模块都会在 __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 文件。

最新文章

  1. Html/Css(新手入门第三篇)
  2. html+css—two
  3. pure virtual、impure virtual、non-virtual函数的接口继承和实现继承
  4. js打开新窗口的两种方式
  5. WM_DRAWITEM与DrawItem()的讨论(自绘)
  6. 「ZJOI2016」解题报告
  7. wxWidgets与其它GUI工具库比较
  8. is interest important?
  9. Mysql ACID与隔离级别
  10. CSS 布局:40个教程、技巧、例子和最佳实践
  11. 你的Android不好用,都是因为这几点原因
  12. 关于Unity中UI中的Mask组件、Text组件和布局
  13. Alpha发布——视频博客
  14. The Startup Manager FAQ
  15. Spring jdbcTemplate RowMapper绑定任意对象
  16. Linux 切换字符界面和图形界面
  17. Windows10系统可以禁止的服务(按名称排序)
  18. OpenCV打开摄像头失败
  19. DOM基础及DOM操作HTML
  20. D3.js 整体展示篇

热门文章

  1. jq的图片放大镜效果
  2. form:select form:options 标签数据回显
  3. Win7 32位安装Oracle11g R2 图解示例
  4. Idea工具常用技巧总结
  5. Selenium/HtmlUnit设置代理获取JS生成的网页
  6. Java面试中常问的Spring方面问题(涵盖七大方向共55道题,含答案)
  7. 2017ACM暑期多校联合训练 - Team 8 1011 HDU 6143 Killer Names (容斥+排列组合,dp+整数快速幂)
  8. Mac 10.9x下安装配置phonegap3.0开发环境 (涉及android sdk配置)
  9. Java多线程学习(七)并发编程中一些问题
  10. ECharts图表tooltip显示时超出canvas图层解决方法