Python 文件扩展名 .pyc、.pyd 和 .pyo 分别代表什么?

2025年1月5日 | 阅读6分钟

引言

Python 是当今世界上用途最广泛的编程语言之一。它有许多用于不同目的的文件扩展名。其中,.pyc、.pyd 和 .pyo 尤其值得注意。这些文件扩展名包括 .py、.pyc、.pyo 和 .txt,它们在 Python 编程中各扮演着特定的角色;因此,对于任何想要做到最好的 Python 开发者来说,理解它们非常重要。在本文中,作者将解释这两个 Python 文件扩展名的本质和功能,以及语言和框架所划分的复杂性。

1. '.pyc' 文件

有几种已编译的 Python 文件,它们以类似的方式编译,包括 hatch、mark every、legend、grid、text 等。

什么是 pyc 文件?

'. Pyc' 文件扩展名之所以得名,是因为它代表“Python Compiled”(Python 已编译)文件。它指的是 Python 解释器为提高脚本执行速度而创建的文件。当执行用 Python 编写的源代码(.py 文件)时,解释器首先将源代码编译成字节码,字节码是源代码的一种较低级且与平台无关的形式。如果源文件被编译成机器代码,并且生成的文件被命名为 filename.pyc,那么下次解释器运行时,就不需要重新编译源代码。这种字节码随后以 '.pyc' 扩展名的文件形式存储。

目的和好处

就 '.py' 文件而言,它是次要的,但主要目的是加快用 Python 语言编写的程序的运行时间。如果源文件被编译成机器代码,并且生成的文件被命名为 filename.pyc,那么下次解释器运行时,就不需要重新编译源代码。这意味着解释器能够直接加载预编译的字节码,从而为 Python 程序提供更好、更快的启动速度。当执行用 Python 编写的源代码(.py 文件)时,解释器首先将源代码编译成字节码,字节码是源代码的一种较低级且与平台无关的形式。Python 是一个支持 Windows OS 上共享库的通用工具。在脚本中导入和使用的 DLL 文件。

.pyc 文件是如何生成的

由于其动态性,pyc 文件由 Python 解释器创建,语言会将它们写入 .py 文件所在目录中的 'pycache' 目录中。 如方程式 7 所示,用于这些文件的命名模式是原始 '. ' 依赖项的格式、创建的 .py 文件的名称以及引用编译过程中使用的指定 Python 版本的后缀。例如,一个脚本可能被命名为 example。值得注意的是,必须使用 Python 3.8 编译 py 才能创建文件名 'example.cpython-38.pyc'

示例

考虑一个简单的 Python 脚本 'example.py'

输出

Hello World.

说明

当在终端中运行此脚本时,Python 解释器会处理它,将代码转换为字节码,然后为它生成一个 example.cpython-38.pyc 文件在 pycache 目录中。

2. '.pyd' 文件

正如你所见,与静态模块相比,在 Python 中使用动态模块有很多好处。这是因为动态模块可以在运行时动态控制。

什么是 .pyd 文件?

像 .pyd 这样的特定文件扩展名意味着“Python Dynamic module”(Python 动态模块)。它们也被称为“已编译扩展”或“二进制扩展”;这些是使用 C 或 C++ 编写的较低级文件,在解释时,它们为用 Python 编写的程序提供附加功能。本质上,Python 是一个支持 Windows OS 上共享库的通用工具。在脚本中导入和使用的 DLL 文件。

目的和好处

.pyd 文件允许开发者将代码中对性能要求高的部分用 C 或 C++ 编写,然后将它们与其他 Python 应用程序链接起来。这种方法使得 Python 等解释型语言固有的进程和功能得以实现,同时又具备编译型语言的执行速度,这对于广泛的计算、数据操作和外围设备的使用非常有利。

.pyd 文件是如何生成的

. pyd 文件传统上是通过使用 Microsoft Visual Studio 或 MinGW 等编译器将 C/C++ 源代码构建成共享库来生成的。然而,这些文件可以由 distutils 或 setuptools 从 Python 创建,它们是构建系统的一部分,并将帮助创建这些文件。

示例

让我们从一个简单的场景开始,使用 C 扩展与 Python,简单地将两个数字相加。C 代码可能看起来像这样

要将此代码编译成 '.pyd 文件',需要生成一个 setup,如上面脚本 3 的第 8 行所示,将编译后的文件指定为 .py 文件之一的扩展模块,如下所示

运行 python 'setup.Py build_ext -inplace' 将生成一个 'example.Pyd 文件',然后可以在 Python 中导入和使用该文件。

3. '.pyo' 文件:优化 Python 文件

它包括 Python 文件的优化执行时间,这意味着代码能够高效、快速地解决问题。

什么是 .pyo 文件?

此编译器创建的文件扩展名是 '.pyo file',它是 'Python Optimized'(Python 优化)的缩写。这些文件与 'pyc' 文件类似,但在 Python 系统运行时使用优化标志(-O 或 -OO)时生成。PyInstaller 优化 通过优化字节码文件可以实现一些步骤,例如删除 assert 语句和 docstrings,并生成稍微更小、可能更快的字节码文件。

目的和好处

.pyo 文件因此旨在增强 Python 应用程序的能力并最大限度地减少其内存使用量。通过删除生产环境中不需要的功能(如 assert 语句和 docstrings)来降低 Python 文件的“脂肪”,'.pyo' 文件可以在资源稀缺的环境中提供有价值的微优化。Python 是一个通用工具,支持 Windows OS 上的共享库,就像在脚本中导入和使用的 DLL 文件一样。

.pyo 文件是如何生成的

当 Python 脚本运行时带有优化标志等选项时,就会形成它。例如,'python -O script.py' 会执行它并创建 .pyo 文件而不是 .pyc 文件。同样,-OO 标志会进行更激进的编译,从而剥离 docstrings。

示例

考虑同一个 Python 脚本 'example.py'

输出

Hello World

说明

这表明使用字母 'P' 运行此脚本 python -O example。执行 'py' 将在 'pycache' 目录中创建一个 'example.cpython-38.pyo' 文件。此文件将删除 assert 语句,如果我们使用 -OO 标志编译它,甚至 docstring 也会被删除。

结论

这些解释说明了与 .pyc、.pyd 和 .pyo 相关的各种职责。对于任何致力于实现更快的程序性能的 Python 开发者来说,了解鲜为人知但极其重要的文件格式——pyo 文件——至关重要。Pyc 文件创建脚本可执行文件,由于存储了已编译的字节码,它们提高了脚本运行效率;Pyd 文件支持用 C/C++ 编写的、影响性能的扩展;.pyo 文件是已编译的文件,它们实际上包含优化的字节码,在资源受限的环境中有用。Python 是一个支持 Windows OS 上共享库的通用工具。在脚本中导入和使用的 DLL 文件。如果正确使用这些文件类型,则可以大大提高性能,并且开发者有机会创建更有效、更稳定的 Python 应用程序。