如何提升Python 3加载速度?关于pyc文件加载效果的疑问
问题分析与解决方案
为什么py文件启动慢,手动移动pyc后变快?
Python默认会把编译后的pyc文件放在__pycache__目录下,文件名格式为[模块名].[Python版本号].pyc(比如你提到的带310后缀的文件)。运行py文件时,Python会先检查__pycache__里的对应版本pyc是否存在、是否和原py文件匹配(通过修改时间和哈希校验),不匹配就会重新编译。
你的情况大概率是Python没有正确读取到__pycache__里的pyc文件,可能原因包括:
- 脚本目录或
__pycache__目录权限不足,导致Python无法读写 - 原py文件与
__pycache__内的pyc校验不通过(比如py文件修改后未触发重新编译、pyc文件损坏) - 虚拟环境或特定文件系统下,Python读取
__pycache__存在延迟
直接运行pyc文件为什么感觉更快?
直接运行pyc文件时,Python会跳过语法检查、编译生成pyc这两步,直接加载字节码执行,理论上确实比运行py文件快一点,但500行脚本的差异应该极小。你感觉到的“更快”可能是:
- 测试时的环境干扰(比如第一次运行py文件需要加载依赖缓存,第二次运行pyc时依赖已加载)
- 之前运行py文件时每次都在重复编译pyc(比如校验失败),直接运行pyc就跳过了这部分耗时
如何准确验证耗时差异?
用系统工具或Python内置模块精准计时:
- Linux/macOS用
time命令:- 运行py文件:
time python your_script.py - 运行pyc文件:
time python your_script.pyc - 对比输出的
real字段(实际总耗时)
- 运行py文件:
- 跨平台用
time.perf_counter:
在脚本开头加入以下代码,统计完整执行耗时:
分别运行py和pyc文件,对比输出数值import time start = time.perf_counter() # 你的脚本代码... end = time.perf_counter() print(f"总耗时: {end - start:.6f} 秒")
如何让Python正常使用__pycache__内的pyc?
- 检查脚本目录和
__pycache__的权限,确保Python有读写权限 - 删除旧的
__pycache__目录,让Python重新生成匹配的pyc:
Linux/macOS:rm -r __pycache__
Windows:rmdir /s __pycache__ - 确保Python版本与pyc文件的版本后缀一致(比如用Python3.10运行,pyc后缀需为310)
内容的提问来源于stack exchange,提问作者Johnf
相关产品推荐
相关产品推荐

