MicroPython 定义了 .mpy 文件的概念,该文件是一种二进制容器文件格式,在其中包含了预编译的 Python 代码,这种类型的文件可以像普通的 .py 模块一样被导入到 MicroPython 程序中。举个例子来说明这种类型文件的使用方法。例如,只要 foo.mpy 存在于指定的路径中,我们就可以通过 import foo 语句来导入 foo.mpy 文件。
这种类型文件的导入规则是这样的,首先按顺序搜索 sys.path 中列出的每个目录。当搜索特定目录时,首先查找 foo.py,如果找不到该目录,则查找 foo.mpy,如果没有找到,则在下一个目录中继续搜索。通过这种方式,foo.py 文件的优先级将高于将高于 foo.mpy 文件。
这些 .mpy 文件中的主要内容是字节码,这些字节码是通过 mpy-cross 程序从 Python 源文件(.py文件)生成的。对于一些芯片架构,.mpy 文件还可以包含原生机器码,这些机器码可以通过多种方式产生,他们大部分是由 C 语言代码生成的。
本小节将介绍如何构建和使用包含来自非 Python 语言的本机代码的 .mpy 文件。
这使您可以使用 C 之类的语言编写代码,进行编译并将其链接到 .mpy 文件,然后像普通的 Python 模块一样导入此文件。这可用于实现对性能至关重要的功能,或用于包含以另一种语言编写的现有库。
使用原生 .mpy 文件最主要的优点之一是该文件可以被动态导入到 MicroPython 中,而无需重新编译固件。你无需像在 MicroPython 中添加外部 C 模块 时那样,重新编译你的固件。
这里的重点是使用 C 来构建原生模块,但是从理论上来说,任何语言编译成的独立机器码都可以放入 .mpy 文件中。