Micropython的包管理

MicroPython包支持多种管理和安装方式,本文主要mipmpremote以及手动安装包的方式,另外也会说明下如何发布自己的包。

使用**mip**安装包

mip(“mip installs packages”)是一个跟Python pip概念类似的工具,但它不使用PyPI索引,而是默认使用micropython-lib作为索引,支持网络的板子通常包含mip模块,可以从micropython-lib或第三方站点(如:GitHub)安装包。

通常可以在REPL中使用mip

>>> import mip
>>> mip.install("pkgname")  # 安装最新版本的"pkgname"包及其依赖
>>> mip.install("pkgname", version="x.y")  #安装版本为x.y的"pkgname"包
>>> mip.install("pkgname", mpy=False)  #安装源代码版本(如.py而不是.mpy文件)

mip通过搜索sys.path中第一个以/lib结尾的条目来检测文件系统中适当的位置,可以使用target来覆盖目标位置,但要注意,该路径必须在sys.path 中,以便随后导入:

>>> mip.install("pkgname", target="third-party")
>>> sys.path.append("third-party")

除了使用micropython-lib索引下载软件包,mip还可以安装第三方库。最简单的方法是直接下载文件:

>>> mip.install("http://example.com/x/y/foo.py")
>>> mip.install("http://example.com/x/y/foo.mpy")

直接安装文件时,仍支持使用target参数设置目标路径,但会忽略mpy和版本。

URL也可以以github:开头,作为指向GitHub上托管内容的一种简单方式:

>>> mip.install("github:org/repo/path/foo.py")  # 使用缺省分支
>>> mip.install("github:org/repo/path/foo.py", version="branch-or-tag")  # 可选特定的分支或Tag

更复杂的软件包(即包含多个文件或有依赖关系)可通过指定 package.json 的路径下载。

>>> mip.install("http://example.com/x/package.json")
>>> mip.install("github:org/user/path/package.json")

如果没有指定json文件,则会隐式添加"package.json":

>>> mip.install("http://example.com/x/")
>>> mip.install("github:org/repo")  # 使用 repo 的缺省分支
>>> mip.install("github:org/repo", version="branch-or-tag")

在Unix上使用**mpi**

在Unix环境,也可在REPL中使用mip,如上文所述,也可使用 -m:

$ ./micropython -m mip install pkgname-or-url
$ ./micropython -m mip install pkgname-or-url@version

可以设置--target=path--no-mpy--index 参数:

$ ./micropython -m mip install --target=third-party pkgname
$ ./micropython -m mip install --no-mpy pkgname
$ ./micropython -m mip install --index https://host/pi pkgname

使用**mpremot**安装包

mpremote工具也具有与mip相同的功能,可用于从PC主机将软件包安装到本地连接的设备上(如通过 USB 或 UART):

$ mpremote mip install pkgname
$ mpremote mip install pkgname@x.y
$ mpremote mip install http://example.com/x/y/foo.py
$ mpremote mip install github:org/repo
$ mpremote mip install github:org/repo@branch-or-tag

可以设置--target=path、``--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 格式)。根据电路板的不同,可以通过大容量USB存储器、mpremote工具(例如 mpremote fs cp path/to/package.py :package.py)、webrepl 等方式实现。

编写和发布包

让MicroPython用户广泛的访问你的软件包最简单的方法是发布到 microropython-lib,用户可通过mipmpremote自动获取并编译成字节码。更多信息请参见https://github.com/micropython/micropython-lib。

要编写可由 mipmpremote 下载的 "自托管 "软件包,需要一个静态网络服务器(或 GitHub)来托管单个.py文件或与.py文件一起托管的package.json文件。

下面是mlx90640库的package.json文件:

{
  "urls": [
    ["mlx90640/__init__.py", "github:org/micropython-mlx90640/mlx90640/__init__.py"],
    ["mlx90640/utils.py", "github:org/micropython-mlx90640/mlx90640/utils.py"]
  ],
  "deps": [
    ["collections-defaultdict", "latest"],
    ["os-path", "latest"],
    ["github:org/micropython-additions", "main"]
  ],
  "version": "0.2"
}

它包括两个文件,托管在名为 org/micropython-mlx90640 的GitHub仓库中,安装到设备上的mlx90640目录中。依赖collections-defaultdictos-path,这两个文件会从micropython-lib自动安装。第三个依赖关系会安装GitHub仓库org/micropython-additions主分支package.json文件中定义的内容。

冻结包

当从设备文件系统导入一个Python模块或软件包时,它会被编译成RAM中的字节码,以便由虚拟机执行。对于.mpy文件,这一转换已经完成,但字节码最终仍在RAM 中。

对于低内存设备或大型应用,从ROM运行字节码可能更有优势。具体做法是将字节码 "冻结 "到MicroPython固件中,然后再刷到设备上。它们运行时的性能是一样的(虽然导入速度更快),但它可以释放大量内存供程序使用。

这种方法的缺点是开发速度要慢得多,因为每次都要刷固件,但对于冻结不常变化的依赖关系还是很有用的。

冻结是通过编写清单文件并在构建过程中使用(通常作为定制电路板定义的一部分)来实现的。更多信息请参阅 MicroPython manifest files 指南。

2022 / 01/ 30: 新版esptool 刷micropython固件指令不是 esptool.py cmd... 而是 esptool cmd... 即可;另外rshell 在 >= python 3.10 的时候出错解决方法可以查看:  已于2022年发布的: 第二章:修复rshell在python3.10出错 免费内容: https://edu.youkuaiyun.com/course/detail/29666 2025/07/07: 由于该视频在2019年制作,当时py3.7;现在py3.13 由于pyreadline冲突rshell已不能用;如果仍要使用rshell请安装py3.12并用我修改的rshell: https://github.com/gamefunc/rshell/releases micropython语法和python3一样,编写起来非常方便。如果你快速入门单片机物联网而且像轻松实现各种功能,那绝力推荐使用micropython。方便易懂易学。 同时如果你懂C语音,也可以用C写好函数并编译进micropython固件里然后进入micropython调用(非必须)。 能通过WIFI联网(2.1章),也能通过sim卡使用2G/3G/4G/5G联网(4.5章)。 为实现语音控制,本教程会教大家使用tensorflow利用神经网络训练自己的语音模型并应用。为实现通过网页控制,本教程会教大家linux(debian10 nginx->uwsgi->python3->postgresql)网站前后台入门。为记录单片机传输过来的数据, 本教程会教大家入门数据库。  本教程会通过通俗易懂的比喻来讲解各种原理与思路,并手把手编写程序来实现各项功能。 本教程micropython版本是 2019年6月发布的1.11; 更多内容请看视频列表。  学习这门课程之前你需要至少掌握: 1: python3基础(变量, 循环, 函数, 常用库, 常用方法)。 本视频使用到的零件与淘宝上大致价格:     1: 超声波传感器(3)     2: MAX9814麦克风放大模块(8)     3: DHT22(15)     4: LED(0.1)     5: 8路5V低电平触发继电器(12)     6: HX1838红外接收模块(2)     7:红外发射管(0.1),HX1838红外接收板(1)     other: 电表, 排线, 面包板(2)*2,ESP32(28)  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

原子星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值