1.项目背景
在 MicroPython 生态早期,开发者共享或使用第三方库时,往往需要手动下载多个文件,再复制到项目目录里。这种 "复制粘贴" 的方式有很多痛点:
- 容易遗漏文件,导致程序报错
- 版本混乱,不知道用的是哪个版本的库
- 依赖管理麻烦,需要自己找齐所有依赖文件
- 分享给别人时,还要打包所有文件,步骤繁琐
后来,MicroPython 社区推出了 mip (mip installs packages)工具,类似 Python 里的 pip,可以自动下载和管理包。但默认的索引是 micropython-lib,第三方库的发布和发现还是不够方便。
类似 pypi 的针对 MicroPython 的包平台还有 mim 和 awesome-micropython,但都问题比较大:


于是,uPyPi(https://upypi.net/) 应运而生 ------ 它是一个专门为 MicroPython 打造的包管理仓库,就像 "MicroPython 版的 PyPI",让开发者可以轻松上传、分享和发现驱动包,彻底解决了早期的库管理难题。
mim 平台的核心问题:
- 版本管理机制:缺失未提供包版本冻结功能,缺乏版本锁定、依赖版本约束等基础能力,无法保障包的长期可用性与依赖稳定性。
- 依赖维护风险不可控:包的可用性完全依赖原开发者的维护状态,若开发者停止维护、升级项目或删除仓库,已收录的包链接会直接失效,下游项目将受到连锁影响,平台无兜底或迁移机制。
- 验证范围有限:仅对提交的包进行 mip 可安装性校验,未覆盖版本兼容性、长期维护性、API 稳定性等核心风险点。
mim 平台的核心问题:
- 版本管理机制:缺失未提供包版本冻结功能,缺乏版本锁定、依赖版本约束等基础能力,无法保障包的长期可用性与依赖稳定性。
- 依赖维护风险不可控:包的可用性完全依赖原开发者的维护状态,若开发者停止维护、升级项目或删除仓库,已收录的包链接会直接失效,下游项目将受到连锁影响,平台无兜底或迁移机制。
- 验证范围有限:仅对提交的包进行 mip 可安装性校验,未覆盖版本兼容性、长期维护性、API 稳定性等核心风险点。

awesome-micropython 项目的核心问题: - 仅为索引集合,无验证能力:本质是驱动与库的链接索引列表,未建立任何有效性、兼容性或安全性验证流程,无法保障收录内容的实际可用性。
- 版本兼容性严重滞后:大量收录的驱动基于 MicroPython v1.19 版本开发,而当前 MicroPython 已迭代至 v1.27+,核心 API 存在多处变更,导致旧版驱动在新版环境中无法正常运行。
- 信息透明度不足:未标注库的维护状态、兼容版本范围等关键信息,用户使用时难以预判兼容性问题,易出现代码报错、功能失效等情况。
2.uPyPi 能带来什么好处?
使用 uPyPi 管理驱动包,有这些核心优势:
- ✅ 一键安装:用户只需一行命令,就能自动下载并安装包及其所有依赖,不用手动复制文件。
- ✅ 版本可控:可以指定安装特定版本的包,避免版本冲突。
- ✅ 依赖自动管理:工具会自动解析并下载依赖,不用自己找文件。
- ✅ 分享便捷:上传到 uPyPi 后,全球开发者都能轻松找到并使用你的驱动包。
- ✅ 更新方便 :包有更新时,用户只需重新执行安装命令,就能获取最新版本。

简单来说,uPyPi 平台是 MicroPython 驱动包的 "集散地",我们可以在这里搜索、查看、下载、上传需要的驱动包。
核心特性包括:
- 类 PyPI 包管理体系:支持 MicroPython 包的上传、浏览、下载及全生命周期管理,适配 MicroPython 生态的包管理需求。
- 标准化元数据管控:强制要求包附带 package.json 文件,统一定义 name、version 等核心元数据,保障包的一致性与兼容性。
- 硬件 / 固件精准适配:支持按硬件型号(如 RP2040)、固件环境筛选适配的包,解决不同硬件 / 版本环境下的适配难题。
- 多语言与可视化管理:提供中英文双语界面一键切换;个人仪表盘可一站式追踪、管理已上传包,清晰展示贡献数据。




其他特性包括:
- 智能缓存策略优化:先通过 LRU 缓存快速提升基础性能,后参考 PostgreSQL 设计思路切换为 Linux PageCache 方案,兼顾性能与系统兼容性,相比同类平台(如 mim 无性能优化),查询 / 下载响应速度显著提升。
- 批量极速上传:支持 ZIP 格式批量上传包,上传速度提升至原先的数十倍,解决单文件上传繁琐、耗时的问题,尤其适配大量驱动 / 库的批量发布场景。
- 精准高效检索:新增 API 支持并重点优化 search 端点,检索结果更精准、响应更快,对于 IDE 插件扩展友好。
- 轻量化开发环境:新增容器化方案与本地开发模式,恢复沙箱支持,无需复杂环境配置即可开展开发;仅开发阶段需绑定 GitHub,上线后无强制平台绑定,降低开发 / 调试门槛。
3.快速安装驱动包
如果你是第一次接触 MicroPython 和 uPyPi 平台,不用担心!这份说明会从最基础的准备工作 开始,一步步教你如何在树莓派 Pico2(无网络)和 Pico2W(有网络)上,从 uPyPi 平台下载并使用驱动包(以 bmp280_driver 气压温度传感器驱动为例)。同时也会简要介绍如何上传驱动包(方便有分享需求的使用者)。
3.1 零基础前置准备
在使用 uPyPi 之前,需要准备好硬件、软件,并完成基础设置,缺一不可。
3.1.1 硬件准备

3.1.2 软件准备
- 安装 Thonny 编辑器:
Thonny 是最适合零基础的 MicroPython 开发工具,支持代码编写、开发板连接、文件管理。
- 下载地址:https://thonny.org/
- 安装方式:按系统提示下一步安装即可(默认设置无需修改)。
- 安装 mpremote 工具(电脑端)
这是电脑与 MicroPython 开发板通信的工具,用于本地安装驱动包 (不支持联网功能的单片机必备)。
打开电脑的「命令提示符(CMD)」或「PowerShell」,输入以下命令并回车:
Bash
pip install mpremote
提示「Successfully installed mpremote」即安装成功。
3.2 开发板基础设置(烧录 MicroPython 固件)
你需要首先给你的 MCU 烧录一个 mpy 固件,这里我们以树莓派 Pico2 / Pico2W 为例,出厂无 MicroPython 固件,需先烧录才能使用。
- 按住开发板上的 BOOTSEL 按键,同时用 USB-C 线将开发板连接到电脑,松开按键。
- 电脑会识别出一个名为「RPI-RP2」的 U 盘。
- 打开浏览器,下载对应固件:
- 树莓派 Pico2 固件:https://micropython.org/download/RPI_PICO2/
- 树莓派 Pico2W 固件:https://micropython.org/download/RPI_PICO2W/
- 将下载的
.uf2固件文件复制粘贴到「RPI-RP2」U 盘中。 - 复制完成后,开发板会自动重启,U 盘消失,此时固件烧录完成。
3.3 打开 uPyPi 平台搜索包和复制命令
uPyPi 平台是 MicroPython 驱动包的 "集散地",我们可以在这里搜索、查看、下载需要的驱动包。

打开浏览器,访问 uPyPi 官网:https://upypi.net/
在页面顶部的搜索框 中输入 bmp280,点击右侧「搜索」按钮:

搜索结果会显示匹配的驱动包(如 bmp280_driver 1.0.0),点击即可:

进入驱动包详情页,可在页面左侧切换驱动包版本:

页面左侧会显示核心安装命令(本地安装 / 远程安装):

3.4 下载并安装驱动包
根据开发板是否有网络,分为本地安装(Pico2) 和远程安装(Pico2W) 两种方式。
3.4.1 本地安装(适用于无 WiFi 的开发板)
通过 USB 连接电脑,用 mpremote 工具将 uPyPi 上的驱动包安装到开发板。
输入执行指令:
Bash
mpremote mip install https://upypi.net/pkgs/bmp280_driver/1.0.0
等待命令执行,终端出现以下内容,即安装成功:

我们也可以使用下面指令查看板内文件确认有没有下载成功:
Bash
# 查看根文件目录
mpremote fs ls
# 查看'lib/'文件夹下目录
mpremote fs ls 'lib/'

3.4.2 远程安装(适用于有 WiFi 的开发板)
先让开发板连接 WiFi,再直接在开发板的 REPL 终端中安装驱动包。
- 先用 USB 线将树莓派 Pico2W 连接到电脑,Thonny 自动识别后,点击底部「Shell」面板。
- 若 Shell 面板显示
>>>,表示已进入 MicroPython 的 REPL 交互模式;若显示其他内容,按「Ctrl + D」重启开发板,即可看到>>>。
在 Shell 面板的 >>> 后,逐行输入以下代码(替换为你的 WiFi 名称和密码),每输入一行按回车:
Python
import network
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect("你的WiFi名称", "你的WiFi密码")
# 等待连接成功
import time
while not wlan.isconnected():
print("Connecting to WIFI...")
time.sleep(1)
print("WIFI Connected! IP Address:", wlan.ifconfig()[0])
若显示「WIFI Connected! IP Address: 192.168.xx.xx」,表示 WiFi 连接成功:

在 Shell 面板的 >>> 后,输入以下完整安装命令:
Bash
import mip
mip.install("https://upypi.net/pkgs/bmp280_driver/1.0.0")
执行完成后,显示如下即安装成功:
点击左侧「文件」面板中的「Raspberry Pi Pico2」,展开「lib」文件夹,若能看到 bmp280_float.py 文件,说明安装成功:


4.2 上传驱动包到 uPyPi
4.2.1 本地上传

确保你的项目根目录下包含以下文件(无嵌套文件夹,直接放在根目录):
code/:驱动代码文件夹LICENSE:许可证文件package.json:包配置文件(必须包含 name 和 version 字段)README.md:包说明文档
⚠️ 关键要求:ZIP 包内不能嵌套额外文件夹,所有文件直接在压缩包根目录下(参考示例结构:
BH1750_driver.zip→ 直接包含code/、package.json等)。
接下来将库文件打包为 ZIP 压缩包:
-
选中项目根目录下的所有文件(
code/、LICENSE、package.json、README.md)。 -
右键 → 选择「7-Zip」→「添加到压缩包」(或直接选择「添加到 包名.zip」)。
-
在压缩设置中:
- 压缩格式选择
zip - 文件名建议与包名一致(如
BH1750_driver.zip) - 确认路径模式为「相对路径」,避免生成嵌套目录
- 压缩格式选择
-
生成 ZIP 包后,检查内部结构:打开 ZIP 确认所有文件直接在根目录,无额外文件夹嵌套。


访问 uPyPi 官网,点击右上角「GitHub 登录」,用你的 GitHub 账号授权登录:

登录后,点击顶部「我的面板」,再点击「点击这里上传第一个包」:

进入上传页面,点击「选择文件」,选中刚才生成的 ZIP 包:
确认文件夹包含 package.json 后,点击「上传包」按钮,等待上传完成:



上传成功后,即可在 uPyPi 搜索到你的驱动包,其他使用者可直接安装。
4.2.2 Github URL 上传
通过 GitHub 仓库地址直接提交驱动包,是适合开源项目的便捷上传方式,操作步骤如下:

确保你的驱动包代码已托管至 GitHub 仓库,且满足以下规范:
- 目标目录(仓库根目录或子目录)中必须包含
package.json文件,且该文件需定义name(包名)和version(版本号)字段; - 驱动包总文件大小不超过 10MiB;
- 目标目录中不包含符号链接(软链接 / 硬链接)。

进入你的 GitHub 仓库页面,点击绿色「Code」按钮,在弹出的选项中复制 HTTPS 格式 的仓库 URL(例如:https://github.com/FreakStudioCN/uPyPI_Test_Package.git)。
在 uPyPi 平台「上传驱动包」模块下,进入「GitHub URL 上传」界面,打开「从 Git 仓库提交包」表单,依次填写以下信息:
- Git 仓库 URL:粘贴刚才复制的 GitHub 仓库 HTTPS 地址;
- 分支(Branch) :填写要拉取代码的分支名称,默认填写
main(若你的仓库默认分支为master,需修改为对应分支名); - 目标文件夹列表 :填写驱动包所在的目录路径(多个路径用英文逗号分隔),留空则代表拉取整个仓库;示例中填写
src,lib,表示仅上传src和lib两个目录下的文件。

仔细阅读表单下方的「提交要求」,确认你的仓库完全符合规范后,点击「提交包」按钮。

平台将自动从 GitHub 仓库拉取指定目录的代码,完成驱动包的解析与发布:
- 若提交成功,页面会显示「上传成功」提示;
- 可在「我的面板 → 我上传的包」列表中查看刚上传的驱动包,确认包名、版本号等信息无误;
- 上传完成后,其他 uPyPi 用户即可通过搜索包名,直接安装使用你的驱动包。
4.3 常见问题-避免版本冲突与包名重复

在上传驱动包到 uPyPi 时,你可能会遇到像图片中这样的提示:**"包 bmp280_driver 版本 1.0.0 已存在"**。这是因为 uPyPi 平台对包的管理有严格规则,确保每个包的版本和名称都是唯一的,方便用户准确安装和使用。
uPyPi 不允许同一个包名上传完全相同的版本号。这就像手机 App 的更新日志:
- 每次修复小 bug、优化代码,都需要更新版本号(比如从
1.0.0→1.0.1)。 - 如果版本号不变,平台会认为你在重复上传同一个包,从而拒绝操作。
版本号遵循 "主版本。次版本。修订号" 的规则(语义化版本),每次上传都要递增:
- **修订号(第三位)**:修复小 bug、优化代码细节,比如
1.0.0→1.0.1。 - **次版本(第二位)**:新增功能、兼容新硬件,比如
1.0.1→1.1.0。 - **主版本(第一位)**:大改版、不兼容旧代码,比如
1.1.0→2.0.0。
如果你的包名太宽泛(比如 sensor_driver),很容易和其他开发者的包重名,导致用户安装时混淆。建议遵循以下规则:
- 包名要具体 :包含硬件型号或功能,比如
bmp280_driver(明确是 BMP280 传感器驱动),而不是sensor_driver。 - 格式要规范 :全部小写,用下划线
_分隔单词,避免空格和特殊字符。 - 提前搜索验证:在 uPyPi 首页的搜索框中输入你想使用的包名,确认没有重名后再使用。
遇到 "版本已存在" 提示后的解决步骤:
- 打开驱动包的
package.json文件,修改version字段为新的版本号(比如1.0.1)。 - 保存文件,确保文件名和内容没有变化。
- 回到 uPyPi 上传页面,重新选择驱动包文件夹,点击「上传包」。
- 若提示 "上传成功",则版本更新完成;若仍提示错误,检查包名是否重名,或版本号是否确实递增。
