python 文件 .py .pyc .pyw .pyo .pyd

本文详细解析了Python的编译机制,包括如何将源代码编译为字节码,以及解释了与Python相关的各种文件扩展名的作用与用途,如.py、.pyc、.pyw、.pyo和.pyd文件的特点和应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DLL文件动态链接库文件,是一种可执行文件,它允许程序共享执行特殊任务所必需的代码和其他资源。打不开,不过可以使用反汇编;PYD是一种PYTHON动态模块。实质上还是dll文件,只是改了后缀为PYD,pyd: 扩展模块,一般用C或C++编写,其实可以说是一种更优秀的D语言编写的。

源自:http://my.oschina.net/renwofei423/blog/17404
通常认为,Python是一种解释性的语言,但是这种说法是不正确的,实际上,Python在执行时,首先会将.py文件中的源代码编译成

Python的byte code(字节码),然后再由Python Virtual Machine来执行这些编译好的byte code。这种机制的基本思想跟Java,.NET

是一致的。然而,Python Virtual Machine与Java或.NET的Virtual Machine不同的是,Python的Virtual Machine是一种更高级的

Virtual Machine。这里的高级并不是通常意义上的高级,不是说Python的Virtual Machine比Java或.NET的功能更强大,更拽,而是说

和Java或.NET相比,Python的Virtual Machine距离真实机器的距离更远。或者可以这么说,Python的Virtual Machine是一种抽象层次

更高的Virtual Machine。
Python应该提供一种机制,保存编译的中间结果,即byte code,或者更准确地说,保存PyCodeObject。事实上,Python确实提供
了这样一种机制——Pyc文件。
在执行一个.py文件中的源代码之后,Python并不会自动生成与该.py文件对应的.pyc文件。我们需要自己触发Python来创建pyc文件。

下面我们提供一种使Python创建pyc文件的方法,其实很简单,就是利用Python的import机制。
在Python运行的过程中,如果碰到import abc,这样的语句,那么Python将到设定好的path中寻找abc.pyc或abc.dll文件,如果没有这

些文件,而只是发现了abc.py,那么Python会首先将abc.py编译成相应的PyCodeObject的中间结果,然后创建abc.pyc文件,并将中间

结果写入该文件。接下来,Python才会对abc.pyc文件进行一个import的动作,实际上也就是将abc.pyc文件中的PyCodeObject重新在内

存中复制出来

下面是与python相关的文件扩展名,源自:http://proupy.com/news/33


首先是我们最常见的.py文件。以.py扩展名的文件是源代码文件,由python.exe解释,可在控制台下运行。当然也可以用文本编辑器进

行修改。


接下来介绍的是.pyc文件。以.pyc为扩展名的是python的编译文件。.pyc文件是不能够用文本编辑器之类的进行编辑的,但是同样它的

优点在于.pyc文件的执行速度快于.py文件。至于为什么要有.pyc文件,这个需求太明显了,因为py文件是可以直接看到源码的,如果

你是开发商业软件的话,不可能把源码也泄漏出去吧?所以就需要编译为pyc后,再发布出去。


再接下来介绍的是.pyw文件。很多使用过.pyc文件的同学都知道,.pyc文件执行的时候桌面会出现黑糊糊的窗口,有的时候这是十分难

看的。于是.pyw文件就应运而生了。.pyw文件与.pyc文件本质上没有什么区别,只是.pyw执行的时候不会出现黑窗口。.pyw 格式主要

是被设计来运行开发完成的纯图形界面程序的。 纯图形界面程序的用户不需要看到控制台窗口。值得一提的是,开发纯图形界面程序

的时候,你可以暂时把 .pyw 改成 .py , 以便运行时能调出控制台窗口,看到所有错误信息,方便进行修改。


接下来介绍的是.pyo文件。pyo是优化编译后的程序。 python -O 源文件即可将源程序编译为pyo文件。同样.pyo文件也是不能用文

本编辑器编辑的。


最后介绍的是.pyd文件。.pyd文件并不是使用python编写而成,.pyd文件一般是其他语言编写的python扩展模块。(之前又在网上看到

过有关解释,.pyd文件是用D语言按照一定的格式编写,并处理成二进制文件。那么什么是D语言呢??它是c/c++的综合进化版,不仅

具有二者的全部优点,而且整体性能更佳,但是其抽象程度高。)


Python中,文件后缀通常表示文件的类型和用途。最常见的Python文件后缀是 `.py`,但还有其他一些后缀用于特定目的,尤其是在项目结构复杂或使用了某些工具链时。 --- ### 常见Python文件后缀及其用途 | 后缀名 | 含义与用途 | |--------------|-------------| | `.py` | Python源代码文件,最常见。被Python解释器直接执行或导入。 | | `.pyc` | 编译后的字节码文件,由Python自动生成,用于加速模块加载。 | | `.pyo` | 优化后的字节码文件Python 3.5之前使用)。 | | `.pyd` | Windows平台上的Python扩展模块(基于C/C++编译的DLL文件)。 | | `.so` | Linux/macOS平台上的共享库文件,用于Python扩展模块。 | | `.pyx` | Cython源代码文件,需编译为`.c`或`.cpp`,再编译为`.so`或`.pyd`。 | | `.pxd` | Cython的定义文件,类似于C语言的头文件。 | | `.pyi` | Python类型提示文件(PEP 484),用于提供类型注解。 | | `.pyw` | 仅用于Windows,GUI程序的Python脚本,不显示控制台窗口。 | | `.ipynb` | Jupyter Notebook文件,用于交互式编程和展示。 | | `.egg` | 一种Python包格式,被`.whl`取代。 | | `.whl` | Python的二进制分发格式,用于安装包。 | | `.pyz` | 自包含的Python脚本压缩包,可通过`python`直接运行。 | | `.pyzw` | 类似`.pyz`,但使用Windows GUI启动器。 | --- ### 示例:`.py` 文件 ```python # hello.py def greet(name): print(f"Hello, {name}!") if __name__ == "__main__": greet("World") ``` 这个 `.py` 文件可以被直接运行: ```bash python hello.py ``` 输出: ``` Hello, World! ``` --- ### 示例:`.pyi` 类型提示文件 ```python # hello.pyi def greet(name: str) -> None: ... ``` 该文件用于为 `hello.py` 提供类型信息,帮助类型检查工具(如 `mypy`)进行静态类型分析。 --- ### 示例:`.pyx` Cython 文件 ```cython # demo.pyx def fib(int n): cdef int a = 0 cdef int b = 1 while a < n: print(a) a, b = b, a + b ``` 需要使用 Cython 编译为 `.c` 文件,再编译为 `.so` 或 `.pyd` 才能在 Python 中导入。 --- ### 总结 - `.py` 是 Python 的标准源代码文件。 - `.pyc` 是 Python 自动生成的字节码文件。 - `.pyi` 是类型提示文件。 - `.pyx` 是 Cython 文件。 - `.ipynb` 是 Jupyter Notebook 的交互式脚本文件。 - `.whl` 是 Python 包的安装格式。 根据项目需求选择合适的文件后缀可以提高性能、可维护性和可读性。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FeelTouch Labs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值