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

503 投票
3 回答
361972 浏览
提问于 2025-04-17 10:01

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

  • .pyc:这是Python编译后的文件,里面存的是字节码。简单来说,当你写的Python代码被执行时,Python会把它转换成一种机器能理解的格式,这个格式就存储在以.pyc结尾的文件里。这样下次运行的时候就可以更快,因为不需要再编译一次了。
  • .pyd:这个文件其实是Windows系统下的动态链接库,类似于其他语言的.dll文件。它通常是用C或C++写的,可以让Python调用一些更底层的功能,提升性能或者使用一些特定的库。
  • .pyo:这个文件也是编译后的Python文件,不过它是经过优化的版本。它的目的是为了提高运行速度,通常在你开启了优化选项时生成。

它们之间有什么区别呢?简单来说,.pyc是普通的编译文件,.pyo是优化过的版本,而.pyd则是用来扩展Python功能的库文件。它们都是从.py文件生成的,生成的过程通常是在你运行Python代码时自动完成的。

3 个回答

1

.py : 你写的源代码文件。

.pyc : 编译后的字节码文件。如果你导入一个模块,Python 会生成一个 .pyc 文件,这个文件里包含了字节码,目的是为了让下次导入这个模块时更简单(也更快)。

.pyo : 在开启优化(-O)时生成的 .pyc 文件。

.pyd : Windows 系统下的 Python 动态链接库文件。

276
  • .py - 普通的Python脚本文件
  • .py3 - (很少用)Python3脚本。Python3的脚本通常以“.py”结尾,而不是“.py3”,但我见过几次这种情况
  • .pyc - 编译后的脚本文件(字节码)
  • .pyo - 优化过的pyc文件(从Python3.5开始,Python只使用pyc,不再使用pyo和pyc)
  • .pyw - 在窗口模式下运行的Python脚本,不会显示控制台;用pythonw.exe来执行
  • .pyx - Cython源文件,待转换为C/C++代码
  • .pyd - 制作成Windows DLL的Python脚本
  • .pxd - Cython的现代头文件,用于配合cimport使用
  • .pxi - Cython的旧版头文件,用于原始文本include使用
  • .pyi - 存根文件(PEP 484
  • .pyz - Python脚本归档文件(PEP 441);这是一个包含压缩的Python脚本(ZIP格式)的脚本,位于标准Python脚本头之后
  • .pyzw - 针对MS-Windows的Python脚本归档文件(PEP 441);同样是一个包含压缩Python脚本(ZIP格式)的脚本,位于标准Python脚本头之后
  • .py[cod] - 在“.gitignore”中的通配符表示,文件可能是“.pyc”、“.pyo”或“.pyd”中的一种
  • .pth - 路径配置文件;里面的内容是要添加到sys.path中的额外项目(每行一个)。详细信息见site模块
  • .egg - 用于分发/导入的特殊压缩文件,基本上已经过时(自PEP 427以来)
  • .whl - 仅用于分发的特殊压缩文件,广泛被pip使用

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

557
  1. .py: 这是你写的源代码文件,通常就是你用来编程的文件。
  2. .pyc: 这是编译后的字节码文件。当你导入一个模块时,Python会生成一个*.pyc文件,这个文件里包含了字节码,这样下次导入的时候会更方便、更快。
  3. .pyo: 这是在Python 3.5之前使用的一种文件格式,主要是用于带有优化标志(-O)的*.pyc文件。(下面有个说明)
  4. .pyd: 这基本上就是Windows的dll文件。http://docs.python.org/faq/windows.html#is-a-pyd-file-the-same-as-a-dll

如果想进一步了解.pyc.pyo的区别,可以看看这个链接:http://www.network-theory.co.uk/docs/pytut/CompiledPythonfiles.html(我把重要的部分复制在下面)

  • 当使用带有-O标志的Python解释器时,会生成优化过的代码并存储在.pyo文件中。现在的优化器帮助不大,它只会去掉断言语句。当使用-O时,所有字节码都会被优化;.pyc文件会被忽略,.py文件会被编译成优化后的字节码。
  • 如果给Python解释器传递两个-O标志(-OO),字节码编译器会进行一些优化,这在极少数情况下可能会导致程序出错。目前只有__doc__字符串会从字节码中移除,这样生成的.pyo文件会更小。因为有些程序可能依赖这些字符串,所以只有在你知道自己在做什么的情况下才应该使用这个选项。
  • 程序从.pyc.pyo文件运行并不会比从.py文件运行快;.pyc.pyo文件唯一快的地方是加载速度。
  • 当通过命令行运行脚本时,脚本的字节码不会被写入.pyc.pyo文件。因此,通过将大部分代码移动到一个模块中,并使用一个小的引导脚本来导入这个模块,可以减少脚本的启动时间。也可以直接在命令行中指定.pyc.pyo文件。

说明:

在2015年9月15日,Python 3.5版本实施了PEP-488,取消了.pyo文件。这意味着.pyc文件现在同时表示未优化和优化过的字节码。

撰写回答