python常见的几种文件格式

820次阅读
没有评论

这几天,刚好因工作需要爬取网站图片资源,下载了几款软件,想重写软件,对.pyd文件格式产生了疑惑

python常见的几种文件格式

一般认为,Python 是一种解释性语言,Python 在执行时,会先将 .py 文件中的源代码编译成  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 的 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 .pyc 文件的此种运行机制,所以,可随时删除所有中间过程 .pyc 文件,当 Python 再次运行时,还会重生成这些 .pyc 文件,对您所编辑程序的运行并无任何影响。当然,得有源代码才行

视窗用 python.exe 运行 .py ,用 pythonw.exe 运行 .pyw。因为安装视窗版 Python 时,扩展名 .py 自动被登记为用 python.exe 运行, 而 .pyw 则被登记为用 pythonw.exe 运行。

.py文件

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

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

.pyc文件

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

至于为什么要有 .pyc 文件,因为 .py 文件是可直接看到源码的。若是软件开发商,不可能把源码泄漏出去?所以,就需编译成 .pyc 后再发布。

但 .pyc 文件只是经简单编译,并未加密,因此,有些工具还能反编译它得出源代码。

.pyw文件

.pyc 文件执行时,桌面会出现类似 CMD 命令的黑色 shell 窗口,十分难看,于是 .pyw 文件就应运而生了。.pyw 文件与 .pyc 文件的执行,本质上并没什么区别,只是 .pyw 文件执行的时候不会出现类似 CMD 命令的黑色 shell 窗口。

.pyw 文件格式主要是设计用来运行 Python 纯 GUI (图形用户界面) 程序的。纯 GUI (图形用户界面) 程序的用户不需要看到类似 CMD 命令的黑色 shell 控制台窗口。当 .pyw 文件运行时,所有 stdout(标准输入输出)、stderr(标准错误) 输出无效,所有原 stdin(标准输入) 的读取只会得到 EOF。

值得一提的是,开发纯 GUI (图形用户界面) 程序时,可暂时把 .pyw 改成 .py,以便运行时调出控制台窗口,看到所有错误信息,方便修改、调试。

注意:采用 PyQt、PySide 等 GUI (图形用户界面) 开发框架开发的程序,源文件仍可采用 .py,无需单独使用 .pyw。

.pyd文件格式

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

Python 要导入 .pyd 文件,实际上是在 .pyd 文件中封装了一个 module。在 python 中使用时,把它当成 module 来用就可以了,即:"import 路径名.modulename" 即可,路径名为 .pyd 文件所在的路径。

基于 Qt/C++ 的 PyQt、PySide GUI (图形用户界面) 开发框架绑定,会为每个 Qt/C++ 库 .dll 文件生成一个中间 .pyd 文件。PyWin32 项目分发包中,也存在很多 MicroSoft Windows OS 相应 .dll 文件的中间 .pyd 文件。

Cython 可将个人基于 Python 语言编写的 Python 模块编译成具有 C 语言特性的 .pyd 文件。

神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试

相关文章:

版权声明:wuyou2019-11-25发表,共计2071字。
新手QQ群:570568346,欢迎进群讨论 Python51学习
评论(没有评论)