执行程序时,Python 内部会先将源代码编译成所谓字节码的形式。编译时一个简单的翻译步骤,字节码时一种低级的、与平台无关的形式。这些字节码可以提高执行速度。
如果 Python 进程在机器上拥有写入权限,那么它将把程序的字节码保存为一个以 .pyc
为扩展名的文件。
- 对 Python 3.2 之前的版本,运行程序之后,你会在那些源代码的附近(也就是说在同一个目录下)看到这些文件。
- 在 Python 3.2 以及之后的版本,Python 将把
.pyc
字节码存储在名为__pychache
的子目录中,这个子目录位于与源文件相同的路径下。【新版 Python 的__pycache__
子目录中的文件命名中包含了编译它们的 Python 的版本信息。
何时重新编译:
- 源文件改变。检查源文件和字节码文件的最后一次修改的时间戳。
- Python 的版本。使用了不同的 Python版本。
如果 Python 无法在机器上写入字节码,程序仍然可以工作:字节码会在内存中生成,并在程序结束时直接被丢弃。
一旦程序编译成字节码(或字节码从已经存在的 .pyc
文件中载入),之后的字节码发送到通常称为 Python 虚拟机(Python Virtual Machine,简称为 PVM)的程序上来执行。