python 文件扩展名 .pyc .pyd .pyo 代表啥?

Posted

技术标签:

【中文标题】python 文件扩展名 .pyc .pyd .pyo 代表啥?【英文标题】:What do the python file extensions, .pyc .pyd .pyo stand for?python 文件扩展名 .pyc .pyd .pyo 代表什么? 【发布时间】:2012-02-07 23:45:16 【问题描述】:

这些 python 文件扩展名是什么意思?

.pyc .pyd .pyo

它们之间有什么区别以及它们是如何从 *.py 文件生成的?

【问题讨论】:

【参考方案1】:
    .py:这通常是您编写的输入源代码。 .pyc:这是编译后的字节码。如果您导入一个模块,python 将构建一个包含字节码的 *.pyc 文件,以便以后再次导入它更容易(更快)。 .pyo:这是 Python 3.5 之前使用的文件格式,用于使用优化 (-O) 标志创建的 *.pyc 文件。 (见下面的注释) .pyd:这基本上是一个windows dll文件。 http://docs.python.org/faq/windows.html#is-a-pyd-file-the-same-as-a-dll

还有一些关于.pyc vs .pyo的进一步讨论,看看:http://www.network-theory.co.uk/docs/pytut/CompiledPythonfiles.html(我已经复制了下面的重要部分)

当使用 -O 标志调用 Python 解释器时,会生成优化代码并将其存储在“.pyo”文件中。优化器目前没有多大帮助;它只删除断言语句。使用 -O 时,所有字节码都被优化; .pyc 文件被忽略,.py 文件被编译为优化的字节码。 将两个 -O 标志传递给 Python 解释器 (-OO) 将导致字节码编译器执行优化,在极少数情况下可能会导致程序出现故障。目前只从字节码中删除__doc__ 字符串,从而生成更紧凑的“.pyo”文件。由于某些程序可能依赖于提供这些,因此只有在您知道自己在做什么的情况下才应使用此选项。 从“.pyc”或“.pyo”文件中读取程序的运行速度不会比从“.py”文件中读取时快;唯一比“.pyc”或“.pyo”文件更快的是它们的加载速度。 当通过在命令行中给出脚本名称来运行脚本时,脚本的字节码永远不会写入“.pyc”或“.pyo”文件。因此,可以通过将脚本的大部分代码移动到模块并使用导入该模块的小型引导脚本来减少脚本的启动时间。也可以直接在命令行上命名“.pyc”或“.pyo”文件。

注意:

在 2015 年 9 月 15 日,Python 3.5 release 实施了 PEP-488 并消除了 .pyo 文件。 这意味着.pyc 文件代表未优化和优化的字节码。

【讨论】:

dll文件是python脚本还是c/c++脚本生成的? @yankitwizzy:是的。它们应该由 C/C++ 代码生成。该文件应该是机器码,所以不能直接来自python。 “优化器目前没有多大帮助;它只删除了断言语句。”。你确定吗?试试def f(x): assert(x**5 == x*x*x*x*x); return x; import timeit; print(timeit.repeat("for x in range(100): f(x)", "from __main__ import f", number=10000)); @J.C.Leitão:我确定什么?您能否解释一下您认为您的示例显示的内容,而不仅仅是在评论中抛出代码。 请注意,in Python 3.5、PEP 488 已实现,这消除了 .pyo 文件的概念。甚至优化的字节码也以 .pyc 扩展 Python 3.5 结尾。【参考方案2】: .py - 正则脚本 .py3 -(很少使用)Python3 脚本。 Python3 脚本通常以“.py”而不是“.py3”结尾,但我见过几次 .pyc - 编译脚本(字节码) .pyo - 优化的 pyc 文件(从 Python3.5 开始,Python 将只使用 pyc 而不是 pyo 和 pyc) .pyw - 在窗口模式下运行的 Python 脚本,无需控制台;用 pythonw.exe 执行 .pyx - 将 Cython src 转换为 C/C++ .pyd - 作为 Windows DLL 制作的 Python 脚本 .pxd - 相当于 C/C++ 头文件的 Cython 脚本 .pxi - MyPy 存根 .pyi - 存根文件 (PEP 484) .pyz - Python 脚本存档 (PEP 441);这是一个在标准 Python 脚本头之后包含二进制形式的压缩 Python 脚本 (ZIP) 的脚本 .pywz - 适用于 MS-Windows 的 Python 脚本存档 (PEP 441);这是一个在标准 Python 脚本头之后包含二进制形式的压缩 Python 脚本 (ZIP) 的脚本 .py[cod] - “.gitignore”中的通配符表示,表示文件可能是“.pyc”、“.pyo”或“.pyd”。 .pth - 路径配置文件;它的内容是要添加到sys.path 的附加项目(每行一个)。请参阅site 模块。

可以在http://dcjtech.info/topic/python-file-extensions/ 找到更多 Python 文件扩展名(大多数是罕见的和非官方的)

【讨论】:

需要注意的是,一个«.pyx»文件并不是完全转换为C的Python源代码,而是Cython源代码(即:等待转换为C) PYI 扩展中的“I”代表什么? “包括”/“实施”/“接口”? .pyw 表示创建窗口的 PYthon 脚本,而不是 Python 4 Windows。 .pyw可以在*nix下执行 一般来说 .pyw 是一个在窗口模式下运行的脚本,即没有控制台输出。正如@VladislavToncharov 所说,它们可以在大多数支持python的平台上运行如果安装了 这个答案应该讨论.pth文件。

以上是关于python 文件扩展名 .pyc .pyd .pyo 代表啥?的主要内容,如果未能解决你的问题,请参考以下文章

python py pyc pyw pyo pyd之间区别

python文件后缀名是啥

python脚本文件的扩展名是啥

python学习之pyc,pyo,pyd文件

python程序文件test.py编译后的文件名

Python文件.py||.pyi||.pyc||.pyo||.pyd等各种文件后缀区别