python常见文件格式 .py .pyc .pyw .pyo .pyd的区别

.py 文件

以 .py 作扩展名的文件是 Python 源代码文件,由 python.exe 解释,可在控制台下运行。

可用文本编辑器或其它专用 Python IDE (集成开发环境) 工具进行修改。

.pyc 文件

以 .pyc 作扩展名的文件是 python 编译文件。

.pyc 文件是不能直接用文本编辑器进行编辑,其优点是 .pyc 文件的执行速度要远快于 .py 文件。

在 Python 运行过程中遇到 import abc 这样的语句,Python 将会在设定好的 path 中寻找 abc.pyc 或 abc.dll 文件。若没有这样的文件,而只是发现了 abc.py 文件,那么,Python 会首先将 abc.py 编译成相应的 PyCodeObject 中间结果,然后再创建 abc.pyc 文件,并将中间结果写入该文件。接下来,Python 才会对 abc.pyc 文件进行一个 import 动作,实际上也就是将 abc.pyc 文件中的 PyCodeObject 重新在内存中复制出来,加以运行。

由于上面的生成机制,所以,可随时删除 .pyc 文件,再次运行时,还会重生成

.pyc 文件只是经简单编译,并未加密,因此,有些工具可以反编译。

.pyw 文件

.pyc 文件执行时,桌面会出现 CMD 命令窗口(linux是shell命令窗口),有时并不想出现这个窗口。

.pyw 文件执行的时候不会出现命令窗口

主要应用在 GUI (图形用户界面) 程序时,运行GUI程序没有必要出现命令窗口

.pyo 文件

“python -O 源文件” 即可将 Python 源程序编译成 .pyo 文件,但有时仍得采用 .pyc 作后缀,才能正常运行。

.pyo 文件是相对 .pyc 而言的,优化编译后的 Python 文件。 同样,.pyo 文件也不能直接用文本编辑器进行编辑。

也可以反编译

.pyd 文件

.pyd 文件是非 Python,由其它编程语言 “编写-编译” 生成的 Python 扩展模块。

Cython 可将py文件编译成具有 C 语言特性的 .pyd 文件。

在python安装目录中,DLLs文件夹下有很多 .pyd 文件,如下图:

在 .py 中使用 .pyd 文件时,把它当成 module 来用就可以了,即:”import 路径名.modulename” 即可,路径名为 .pyd 文件所在的路径。
如socket.py源码中就直接引入_socket模块
大约在socket.py的49行上下,代码如下:

import _socket
from _socket import *

.pyd 文件有时也是用 D 语言按照一定格式编写,编译生成的二进制文件。

感谢:
http://forum.digitser.cn/thread-1758-1-1.html


原文出处:/show_1EF2Zg2nxB6r.html