pyd 和 pyc 究竟是个什么东西?

月小水长

共 1743字,需浏览 4分钟

 ·

2022-01-02 09:29

    点击上方 月小水长 并 设为星标,第一时间接收干货推送

这是 月小水长 的第 108 篇原创干货

目前公众号平台改变了推送机制,点“赞”、点“在看”、添加过“星标”的同学,都会优先接收到我的文章推送,所以大家读完文章后,记得点一下“在看”和“赞”。

写在开篇

今天公众号推送的另一篇其实已经稍微介绍了 pyd 和 pyc,这里单独成文,一为补充,二为日后快速索引到相关知识点。

pyd 特点及生成方式

我们知道 windows 系统有许多 DLL 后缀的文件,即动态链接库,在运行时链接到调用程序。在运行时链接到 DLL 之类的库的主要优点是,它可以促进代码重用,模块化体系结构和更快的程序启动。结果,DLL 在 Windows 操作系统周围提供了许多功能。pyd 这个 d 就是取自于 DLL,只能运行在 windows 系统上
假设我们有一个 demo.py,想要打成 demo.pyd;首先需要在 demo.py 同目录下新建个 setup.py 文件,内容如下
from distutils.core import setupfrom Cython.Build import cythonizesetup(ext_modules=cythonize("demo.py"))

然后在命令行或终端 cd 到这个目录下,输入一行命令之

python setup.py build_ext --inplace

当前目录下就会生成一个  build 文件夹,一个 .c 文件,还有我们的主人翁 .pyd 文件自动生成的名字并不是 demo.pyd,而是 

demo.cp36-win_amd64.pyd

这个 cp36 和 win_amd64 视 python 版本和操作系统而定。我们需要把它改成 demo.pyd,注意,是只能改成 demo.pyd;改成其他任何名字都不行,使用时会 import error。使用该 pyd 方式如下:

import demofrom demo import {{类名|函数名}}

pyc 特点及生成方式

而我们安装的 python 目录下有许多 pyc 文件,这个 c 是编译 compile 过的意思,可以使用 python 解释器编译 py 文件 成 pyc 字节码文件。使用 pyc 可以加快程序的加载速度,而不能加快程序的实际执行速度,这就是解释为什么我们安装 python 目录很多第三方库下是 pyc 文件的原因,因为它可以使得 import 一些第三方库的速度加快。由于 .pyc 文件是编译好的字节码,它是独立于平台的,因此可以在不同体系结构的计算机之间共享。其实还有一个和 pyc 类似的字节码文件 pyo,一般 pyo 替代未经优化而创建的 pyc 文件,这里就不展开了~

使用下面一行命令就能将当前目录下的所有 py 文件打成 pyc

python -m compileall ./

pyc 的改名规则和 import 使用同 pyd !!!


还有一点需要注意的是,由于 pyc 是由特定的 python 解析器生成的,它虽然能跨平台,但是不能跨版本,也只能运行在特定的 Python 版本上。如果 Python 版本不对,它会报 ImportError: bad magic number 错误。

Pycharm 文件目录默认不索引pyc 

 pyc 文件放到 Pycharm 中并不会显示它的存在?,但是确实实在存在于我们的文件夹之中的

Pycharm 中文件目录


文件浏览器中文件目录

这是为什么呢?我猜测是 Pycharm 把 pyc exclude 排除显示了,上图 Pycharm 的 External Libraries 就是我们的 python 解析器,它有许许多多 pyc,如果全部显示。那么 index 索引将会非常大,严重会导致电脑卡死。

但是 pyd 就没有这种问题~

如不足之处欢迎批评指正~

浏览 111
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报