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

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

原文:http://blog.csdn.net/feeltouch/article/details/45952003

通常认为,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++的综合进化版,不仅具有二者的全部优点,而且整体性能更佳,但是其抽象程度高。)

发表评论

电子邮件地址不会被公开。 必填项已用*标注