一、执行过程
- 当运行Python脚本时,Python编译器先会把.py文件中的每一条语句都编译成字节码。
- 如果Python有写入权限,那么Python会把这一组字节码保存为一个.pyc文件。下次运行时,如果没有修改过源代码,Python会跳过编译步骤,直接加载.pyc文件。修改过就重新编译。(Python会自动检查源文件和字节码文件的时间戳)
- 如果Python没有写入权限,字节码会在内存中生成,程序运行完后字节码被丢弃。
- 编译完成后,或字节码从.pyc文件导入后,字节码会被发送到Python虚拟机PVM(Python Virtual Machine),PVM迭代运行字节码指令,一个接一个完成操作。
- 执行程序时,python将直接加载.pyc,并跳过编译步骤。如果python无法在机器上写入字节码,字节码会在内存中生成,并在程序结束时被丢弃。
- 一旦程序被编译成字节码,之后的字节码发送到python虚拟机执行。PVM就是迭代运行字节码指令的一个大循环,一个接一个完成操作。PVM是Python运行时的引擎,它时常表现为Python系统的一部分,并且是实际运行脚本的组件。从技术上来说,它只是所谓Python解释器的最后一步。
二、关于.pyc 文件
.pyc
文件是 Python 编译后的字节码文件,它是通过将.py
文件的源代码编译为二进制形式而生成的。下面是一些关于.pyc
文件的重要信息:
-
生成方式:当你首次运行一个
.py
文件时,Python 解释器会自动检查是否存在对应的.pyc
文件。如果.pyc
文件不存在或过期,解释器会在内存中将.py
文件的源代码编译为字节码,并将其保存为.pyc
文件。 -
执行速度:由于
.pyc
文件是已经编译的二进制文件,相比于.py
文件,它可以更快地被 Python 解释器加载和执行,从而提高代码的执行速度。这是因为解释器无需再次解析和编译源代码,而是直接加载并执行已编译的字节码。 -
跨平台性:
.pyc
文件是与特定版本的 Python 解释器相关的,不同版本的解释器可能会生成不兼容的.pyc
文件。因此,在跨平台部署或共享.pyc
文件时,需要确保目标环境使用与编译时相同版本的解释器。 -
缓存和更新:
.pyc
文件被用作代码的缓存,它们存储在与源代码相同的目录下。当.py
文件的修改时间早于对应的.pyc
文件,或者.pyc
文件被删除时,Python 解释器会重新生成或更新.pyc
文件。 -
可读性和修改:
.pyc
文件是二进制文件,并且不具备人类可读性。因此,无法直接通过文本编辑器查看或修改.pyc
文件的内容。如果需要修改代码,应该修改对应的.py
文件,然后让解释器重新生成.pyc
文件。
.pyc
文件在 Python 中起到了加速代码执行的作用,允许更快地加载和运行代码。它们由解释器自动生成和管理,通常不需要手动操作.pyc
文件
参考: