公司动态

新手入门:MicroPython 包与模块的安装方法与避坑手册

📅 2026/8/1 21:32:19
新手入门:MicroPython 包与模块的安装方法与避坑手册
mip(mip installs packages) 的概念与Python的 pip 工具相似但是它不使用pypi索引默认情况下是使用micropython-lib作为其索引但同时也可以安装来自第三方站点包括GitHub、GitLab的软件包。从micropython-lib下载时mip将自动获取.mpy文件。该模块可以从micropython-lib和第三方站点包括GitHub安装包装。1. micropython-lib 库模块简介micropython-lib是一个社区驱动的库集合包含了许多用于 MicroPython 的模块这些模块可以用于扩展 MicroPython 的功能。这个库集合包含了很多标准库模块、第三方模块以及一些特定的 MicroPython 模块。micropython-lib地址链接如下https://github.com/micropython/micropython-lib1.1 MicroPython 特定模块​aioespnow: MicroPython 的异步 ESP-NOW 库用于在 ESP32 上进行无线通信。​aiorepl​: 提供异步 REPLRead-Eval-Print Loop支持允许在 MicroPython 环境中进行交互式编程。​bluetooth: MicroPython 的蓝牙模块用于与蓝牙设备进行通信。​bundles: 包含 MicroPython 的软件包和模块集合。​drivers​: 包含驱动程序用于与硬件设备进行通信。​espflash​: 用于在 ESP32 设备上进行闪存操作的工具。​lora​: 用于 LoRaLong Range无线通信的库适用于低功耗、长距离的数据传输。​mip-cmdline: 用于命令行操作的 MIPMicroPython Package工具。​mip: MicroPython 的包管理工具类似于 pip但用于 MicroPython 环境。​net​: 网络模块提供网络连接和操作功能。​senml​: 用于处理 SENMLSensor Markup Language数据的库。​uaiohttpclient​: MicroPython 的异步 HTTP 客户端用于处理 HTTP 请求。​ucontextlib​: MicroPython 的上下文管理工具提供类似于 Python 标准库中的contextlib的功能。​udnspkt​: 用于处理 DNS 数据包的工具。​umqtt.robust​: MicroPython 的 MQTT 客户端库支持 MQTT 协议并提供鲁棒的连接机制。​umqtt.simple​: MicroPython 的简单 MQTT 客户端库用于基础的 MQTT 功能。​upysh​: 提供类似于 Unix 的 shell 命令支持的库。​urequests​: MicroPython 的 HTTP 请求库类似于 Python 的requests模块。​urllib.urequest​: 用于处理 HTTP 请求的库类似于 Python 的urllib模块。​usb​: 提供 USB 设备支持的库。​xmltok​: 用于处理 XML 数据的库。1.2 Python 标准库​aiohttp​: 异步 HTTP 客户端/服务器库用于处理 HTTP 请求和响应。​cbor2​: 用于处理 CBORConcise Binary Object Representation格式数据的库。​iperf3​: 用于网络带宽测试的工具库。​pyjwt​: 用于生成和验证 JSON Web TokensJWT的库。​requests​: Python 的 HTTP 请求库用于处理 HTTP 请求和响应。1.3 Python 标准库模块​future​: 允许在 Python 中使用将来版本的功能和语法。​abc​: 提供抽象基类的支持。​argparse​: 处理命令行参数的库。​base64​: 用于进行 Base64 编码和解码的工具。​binascii​: 提供转换二进制数据和 ASCII 编码的功能。​bisect​: 处理有序序列的插入点的工具。​cmd​: 提供命令行界面处理的工具。​collections-defaultdict​: 提供defaultdict类型的工具属于 Python 的collections模块。​collections​: 提供特殊数据结构如namedtuple,deque,Counter等。​contextlib​: 提供上下文管理器的工具。​copy​: 提供对象复制功能的工具。​curses.ascii​: 提供 ASCII 字符处理功能的工具通常用于终端界面。​datetime​: 提供日期和时间处理功能的工具。​errno​: 提供错误代码的定义。​fnmatch​: 提供文件名匹配功能的工具。​functools​: 提供高阶函数和操作可调用对象的工具。​gzip​: 提供对 GNU zip 格式压缩文件的支持。​hashlib-core​: 提供哈希算法核心功能的工具。​hashlib-sha224​: 提供 SHA-224 哈希算法支持的工具。​hashlib-sha256​: 提供 SHA-256 哈希算法支持的工具。​hashlib-sha384​: 提供 SHA-384 哈希算法支持的工具。​hashlib-sha512​: 提供 SHA-512 哈希算法支持的工具。​hashlib​: 提供哈希算法的工具如 SHA 和 MD5。​heapq​: 提供堆排序和优先队列功能的工具。​hmac​: 提供基于密钥的哈希消息认证码的功能。​html​: 提供 HTML 编码和解码的工具。​inspect​: 提供获取对象信息的工具。​io​: 提供处理流的工具如文件、内存缓冲区等。​itertools​: 提供高效的迭代器功能如组合、排列等。​keyword​: 提供 Python 关键词的列表。​locale​: 提供本地化设置的工具。​logging​: 提供日志记录功能的工具。​operator​: 提供操作符函数的工具。​os-path​: 提供对路径操作的支持通常作为os.path的替代模块。​os​: 提供操作系统功能的工具如文件操作、进程管理等。​pathlib​: 提供面向对象的文件路径处理功能。​pickle​: 提供对象序列化和反序列化功能的工具。​pkg_resources​: 提供对 Python 包和资源的访问功能。​pkgutil​: 提供对 Python 包和模块的工具。​pprint​: 提供打印数据结构的美化工具。​quopri​: 提供 quoted-printable 编码和解码的工具。​random​: 提供生成随机数的工具。​shutil​: 提供文件和目录操作的高级工具。​ssl​: 提供对 SSL/TLS 的支持用于安全网络通信。​stat​: 提供文件状态和文件权限的工具。​string​: 提供字符串处理功能的工具。​struct​: 提供字节结构打包和解包功能的工具。​tarfile-write​: 提供对 tar 文件的写操作支持。​tarfile​: 提供对 tar 文件的读写操作支持。​tempfile​: 提供临时文件和目录的创建功能。​textwrap​: 提供文本换行和格式化功能的工具。​threading​: 提供线程支持的工具。​time​: 提供时间操作的工具。​traceback​: 提供追踪异常和错误的工具。​types​: 提供 Python 类型的定义和操作功能。​unittest-discover​: 提供自动发现测试的工具通常用于单元测试。​unittest​: 提供单元测试框架的工具。​uu​: 提供 uu 编码和解码的工具。​venv​: 提供创建虚拟环境的工具。​warnings​: 提供发出警告的功能。​zlib​: 提供数据压缩和解压缩功能的工具。2.使用远程方式安装包和模块2.1 mip 安装的基本方法对于本地网络功能的 MicroPython 开发板通常使用远程方式 (mpremote) 安装 mipmpremote 命令行工具提供了一组集成的实用功能可通过串口连接与 MicroPython 设备进行远程交互和自动化。可以通过 pip 安装来使用 mpremote。使用 mip 最常见的方法是来自 REPLimport mip # 安装最新版本的 pkgname包括依赖项 mip.install(pkgname) # 安装 pkgname 的指定版本 x.y mip.install(pkgname, versionx.y) # 安装源代码版本即 .py 文件而非 .mpy 文件 mip.install(pkgname, mpyFalse)mip 预设会把包安装在(/lib) 中。如果有指定target选项则会安装在该目录但记得在 sys.path 变量中加入该目录 (sys.path.append(“third-party”))不然 import 会找不到该包的所在位置。# 将 pkgname 安装到指定的目标目录 third-party mip.install(pkgname, targetthird-party) # 将目标目录 third-party 添加到 sys.path 中确保可以导入该目录中的包 sys.path.append(third-party)除了从 micropython-lib 索引下载包之外mip 还可以安装第三方库。最简单的方法是直接下载文件import mip # 从指定的 URL 安装 foo.py 文件这是一个源文件 (.py) mip.install(http://example.com/x/y/foo.py) # 从指定的 URL 安装 foo.mpy 文件这是一个编译后的 MicroPython 文件 (.mpy) mip.install(http://example.com/x/y/foo.mpy)直接安装文件时仍然支持 target 参数来设置目标路径但mpy和 version 会被忽略。 URL 还可以以 github: 或 gitlab: 开头作为指向 GitHub 或 GitLab 上托管的内容的简单方法import mip # 从 GitHub 上的默认分支安装 foo.py 文件 mip.install(github:org/repo/path/foo.py) # 使用默认分支 # 从 GitHub 上安装指定分支或标签的 foo.py 文件 mip.install(github:org/repo/path/foo.py, versionbranch-or-tag) # 可选地指定分支或标签 # 从 GitLab 上的默认分支安装 foo.py 文件 mip.install(gitlab:org/repo/path/foo.py) # 使用默认分支 # 从 GitLab 上安装指定分支或标签的 foo.py 文件 mip.install(gitlab:org/repo/path/foo.py, versionbranch-or-tag) # 可选地指定分支或标签URL可以通过指定 package.json 的路径来下载更复杂的包即具有多个文件或具有依赖项。import mip # 从指定 URL 下载并安装包含依赖项信息的 package.json 文件 mip.install(http://example.com/x/package.json) # 从指定网址安装 package.json 文件 # 从 GitHub 仓库的指定路径下载并安装 package.json 文件 mip.install(github:org/user/path/package.json) # 从 GitHub 安装 package.json 文件 # 从 GitLab 仓库的指定路径下载并安装 package.json 文件 mip.install(gitlab:org/user/path/package.json) # 从 GitLab 安装 package.json 文件如果未指定 json 文件则隐式添加“package.json”import mip # 从指定 URL 下载并安装包网址为目录 mip.install(http://example.com/x/) # 从指定网址安装包网址为目录 # 从 GitHub 仓库下载并安装默认分支上的包 mip.install(github:org/repo) # 使用默认分支从 GitHub 安装包 # 从 GitHub 仓库下载并安装指定分支或标签上的包 mip.install(github:org/repo, versionbranch-or-tag) # 指定分支或标签从 GitHub 安装包 # 从 GitLab 仓库下载并安装默认分支上的包 mip.install(gitlab:org/repo) # 使用默认分支从 GitLab 安装包 # 从 GitLab 仓库下载并安装指定分支或标签上的包 mip.install(gitlab:org/repo, versionbranch-or-tag) # 指定分支或标签从 GitLab 安装包2.2 mip 安装的演示案例这里我们演示如何下载一个random随机数生成模块首先我们需要使得开发板连接网络具体设置和需要的开发板可以查看风雅一号板教程-ETH以太网章节中内容。示例代码如下# Python env : MicroPython v1.23.0 on Wiznet W5500 # -*- coding: utf-8 -*- # Time : 2024/8/11 上午11:37 # Author : 李清水 # File : main.py # Description : 以太网类实验 # 导入相关模块 # 导入硬件相关模块 from machine import Pin,SPI # 导入时间相关模块 import time # 导入网络相关模块 import network # 导入用于创建和管理网络连接的套接字模块 from usocket import socket # 导入包管理器模块 import mip # 导入系统相关模块 import sys # 导入操作系统服务模块 import os # 全局变量 # 设备IP地址 ip 192.168.1.20 sn 255.255.255.0 gw 192.168.1.1 dns 8.8.8.8 # 用于网络连接的元组对象 netinfo(ip, sn, gw, dns) # 功能函数 def w5x00_init(): ​ 初始化network.WIZNET5K实例,在其中设置静态IP地址并进行连接 ​ ​:return​ nic[network.WIZNET5K]: network.WIZNET5K实例 ​ ​ ​# 声明全局变量 global netinfo # 初始化SPI对象 spi SPI(0, 2_000_000, mosiPin(19), misoPin(16), sckPin(18)) # 实例化network.WIZNET5K类传入使用的片选引脚CS和复位引脚RST nic network.WIZNET5K(spi, Pin(17), Pin(20)) # 激活网络接口 nic.active(True) # 如果DHCP获取失败使用静态IP地址配置 nic.ifconfig(netinfo) # 若是没有连接网络则循环执行 while not nic.isconnected(): time.sleep(1) # 输出寄存器信息 print(nic.regs()) # 打印设置的IP地址 print(ip :, nic.ifconfig()[0]) print(sn :, nic.ifconfig()[1]) print(gw :, nic.ifconfig()[2]) print(dns:, nic.ifconfig()[3]) # 返回network.WIZNET5K实例 return nic # 自定义类 # 初始化配置 # 初始化w5500模块 nic w5x00_init() # 主程序 # 延时3s等待设备上电 time.sleep(3) # 打印调试信息 print(WIZnet mip test)烧录代码使用 mpremote 远程工具连接树莓派 Pico:这里我们使用os.listdir()列出根目录下的所有文件和子目录可以看到目前仅有 main.py 文件。然后我们使用mip.install(random)命令安装random模块mip将从 MicroPython 的官方软件包仓库 (https://micropython.org/pi/v2) 下载并安装random模块。在安装完成random随机数生成模块后可以看到生成三个提示信息Installing random (latest) from​https://micropython.org/pi/v2​to /lib这是安装过程的输出信息,表示正在从指定的 URL 下载并安装random模块安装目标路径是/lib这是 MicroPython 设备上的一个标准库目录Copying: /lib/random.mpy这行输出表示random模块的字节码文件random.mpy已经被拷贝到/lib目录下Done这行输出表示random模块的安装已经完成接下来我们导入刚刚安装的random模块使用random模块的randint()函数生成了一个 1 到 10 之间的随机整数并打印出来测试其是否可以正常使用。并且使用os.listdir()函数列出了当前目录下的所有文件和目录可以看到/lib目录下只有一个random.mpy文件,这就是刚刚安装的random模块。我们也可以指定安装源代码版本.py 文件首先我们可以使用os.remove(/lib/random.mpy)命令删除刚才安装的random.mpy文件然后使用如下命令从micropython-lib来安装源代码版本mip.install(https://github.com/micropython/micropython-lib/blob/master/python-stdlib/random/random.py)然后通过os.remove(./lib/random.mpy)语句删除原先安装的random.mpy文件避免导入冲突。可以看到我们需要导入位于/lib目录下的random.py模块这时使用sys.path.append(/lib)语句将/lib目录添加到 Python 的系统路径中这样做可以让 Python 在搜索模块时也包括/lib目录我们可以直接使用import random来导入该模块了。3.使用手动方式安装包和模块除了使用 mip 联网安装外对于没有本地网络功能的 MicroPython 开发板也可以使用 mpremote 手动方式安装包可以选择从 github 或是本地上传。mpremote 工具除了包括与 mip 相同的功能并且可以从主机 PC 使用来将软件包安装到本地连接的设备例如通过 USB 或 UARTmpremote mip install pkgname mpremote mip install pkgnamex.y mpremote mip install http://example.com/x/y/foo.py mpremote mip install github:org/repo mpremote mip install github:org/repobranch-or-tag mpremote mip install gitlab:org/repo mpremote mip install gitlab:org/repobranch-or-tag可以设置 --targetpath、–no-mpy 和 --index 参数mpremote mip install --target/flash/third-party pkgname mpremote mip install --no-mpy pkgname mpremote mip install --index https://host/pi pkgname还可以通过手动将文件复制到设备来安装软件包以 .py 或 .mpy 形式即将需要的模块放到包含 main.py 文件的文件夹中然后将所有模块烧录到树莓派 Pico 中。可以看到我们通过mpremote mip install abc语句将 abc 抽象基类模块下载到了树莓派 Pico 中。4.交叉安装包与冻结对于低内存设备或大型应用程序从闪存运行字节码可能会更有利。这可以通过将字节码“冻结”到 MicroPython 固件中来完成然后将其闪存到设备中。运行时性能是相同的尽管导入速度更快但它可以释放大量 RAM 供程序使用。字节码冻结是一个解决上述所有问题的过程源代码被预编译成字节码并按原样存储。字节码存储在 ROM 中而不是 RAM 中。冻结包不需要文件系统。使用冻结字节码需要从 C 源代码为给定的 MicroPython 端口构建可执行文件固件。因此该过程是按照特定端口的说明设置工具链和构建端口。例如对于 ESP8266 端口请学习ports/esp8266/README.md并遵循其中的说明。在继续下一步之前请确保您可以构建端口并成功部署生成的可执行文件 / 固件。构建 MicroPython Unix 端口并确保它在您的 PATH 中并且您可以执行micropython。切换到端口目录例如ports/esp8266/ ESP8266。运行。此步骤会清除为冻结而安装的所有先前模块因此您需要跳过此步骤以添加其他模块而不是从头开始。执行命令make clean-frozen运行以安装要冻结的软件包。执行命令micropython -m upip install -p modules packages...运行。执行命令make clean运行。执行命令make