版本混乱 / 依赖缺失?uPyPi:MicroPython 版 PyPI,彻底解决库管理混乱

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 软件准备
  1. 安装 Thonny 编辑器:

Thonny 是最适合零基础的 MicroPython 开发工具,支持代码编写、开发板连接、文件管理。

  • 下载地址:https://thonny.org/
  • 安装方式:按系统提示下一步安装即可(默认设置无需修改)。
  1. 安装 mpremote 工具(电脑端)

这是电脑与 MicroPython 开发板通信的工具,用于​本地安装驱动包 ​(不支持联网功能的单片机必备)。

打开电脑的「命令提示符(CMD)」或「PowerShell」,输入以下命令并回车:

Bash 复制代码
pip install mpremote

提示「Successfully installed mpremote」即安装成功。

3.2 开发板基础设置(烧录 MicroPython 固件)

你需要首先给你的 MCU 烧录一个 mpy 固件,这里我们以树莓派 Pico2 / Pico2W 为例,出厂无 MicroPython 固件,需先烧录才能使用。

  1. 按住开发板上的 BOOTSEL 按键,同时用 USB-C 线将开发板连接到电脑,松开按键。
  2. 电脑会识别出一个名为「RPI-RP2」的 U 盘。
  3. 打开浏览器,下载对应固件:
    1. 树莓派 Pico2 固件:https://micropython.org/download/RPI_PICO2/
    2. 树莓派 Pico2W 固件:https://micropython.org/download/RPI_PICO2W/
  4. 将下载的 .uf2 固件文件复制粘贴到「RPI-RP2」U 盘中。
  5. 复制完成后,开发板会自动重启,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 压缩包:

  1. 选中项目根目录下的所有文件(code/LICENSEpackage.jsonREADME.md)。

  2. 右键 → 选择「7-Zip」→「添加到压缩包」(或直接选择「添加到 包名.zip」)。

  3. 在压缩设置中:

    1. 压缩格式选择 zip
    2. 文件名建议与包名一致(如 BH1750_driver.zip
    3. 确认路径模式为「相对路径」,避免生成嵌套目录
  4. 生成 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,表示仅上传 srclib 两个目录下的文件。

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

平台将自动从 GitHub 仓库拉取指定目录的代码,完成驱动包的解析与发布:

  • 若提交成功,页面会显示「上传成功」提示;
  • 可在「我的面板 → 我上传的包」列表中查看刚上传的驱动包,确认包名、版本号等信息无误;
  • 上传完成后,其他 uPyPi 用户即可通过搜索包名,直接安装使用你的驱动包。

4.3 常见问题-避免版本冲突与包名重复

在上传驱动包到 uPyPi 时,你可能会遇到像图片中这样的提示:​**"包 bmp280_driver 版本 1.0.0 已存在"**​。这是因为 uPyPi 平台对包的管理有严格规则,确保每个包的版本和名称都是唯一的,方便用户准确安装和使用。

uPyPi 不允许同一个包名上传​完全相同的版本号​。这就像手机 App 的更新日志:

  • 每次修复小 bug、优化代码,都需要更新版本号(比如从 1.0.01.0.1)。
  • 如果版本号不变,平台会认为你在重复上传同一个包,从而拒绝操作。

版本号遵循 "主版本。次版本。修订号" 的规则(语义化版本),每次上传都要递增:

  • **修订号(第三位)**:修复小 bug、优化代码细节,比如 1.0.01.0.1
  • **次版本(第二位)**:新增功能、兼容新硬件,比如 1.0.11.1.0
  • **主版本(第一位)**:大改版、不兼容旧代码,比如 1.1.02.0.0

如果你的包名太宽泛(比如 sensor_driver),很容易和其他开发者的包重名,导致用户安装时混淆。建议遵循以下规则:

  • 包名要具体 :包含硬件型号或功能,比如 bmp280_driver(明确是 BMP280 传感器驱动),而不是 sensor_driver
  • 格式要规范 :全部小写,用下划线 _ 分隔单词,避免空格和特殊字符。
  • 提前搜索验证:在 uPyPi 首页的搜索框中输入你想使用的包名,确认没有重名后再使用。

遇到 "版本已存在" 提示后的解决步骤:

  1. 打开驱动包的 package.json 文件,修改 version 字段为新的版本号(比如 1.0.1)。
  2. 保存文件,确保文件名和内容没有变化。
  3. 回到 uPyPi 上传页面,重新选择驱动包文件夹,点击「上传包」。
  4. 若提示 "上传成功",则版本更新完成;若仍提示错误,检查包名是否重名,或版本号是否确实递增。

5.相关操作视频

https://www.bilibili.com/video/BV1PVwuzpEyg/?spm_id_from=333.1387.homepage.video_card.click&vd_source=696723cd18d516916a1d480d0a2fce46

相关推荐
Elastic 中国社区官方博客1 小时前
Elastic 和 OpenAI 合作,将前沿智能引入非结构化企业数据
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai
云飞云共享云桌面1 小时前
SolidWorks—天津智能装备工厂1台高配主机共享给10个研发用
运维·服务器·自动化·汽车·制造
云和恩墨1 小时前
数据库一体机zData X 3.6.0以“性能、成本、韧性、生态”强化数据库基础设施价值主张
数据库
苍狗T2 小时前
LVS相关知识总结
linux·运维·服务器·lvs
灯澜忆梦2 小时前
【MySQL7】多表查询
数据库·sql
义嘉泰2 小时前
XT25F128F-W Flash芯片全面解析
人工智能·嵌入式硬件·芯片
Qlittleboy2 小时前
tp5网站链接不上slqserver,计算机积极拒绝了链接
数据库·sql
QH139292318802 小时前
Keysight N9917B N9918B手持式综合微波分析仪
网络·科技·嵌入式硬件·集成测试·信息与通信