如何在树莓派上实现Python包自动更新且不拖慢开机启动速度?
树莓派Python包自动升级优化方案
方案1:轻量化版本校验+后台静默执行(最适合当前场景)
先做版本比对,只有存在新版本时才执行pip升级操作,无更新时整个检查流程耗时不超过1秒,完全不会拖慢开机速度:
- 先预装好两个轻量依赖:
pip3 install requests packaging,占用空间不足1MB - 写如下检查升级脚本,保存为
/opt/pkg_updater.py:
import importlib.metadata import subprocess import requests from packaging.version import parse # 替换为你自己的包名 PKG_NAME = "my-package" def get_local_version(): try: return importlib.metadata.version(PKG_NAME) except importlib.metadata.PackageNotFoundError: return "0.0.0" def get_latest_version(): try: resp = requests.get(f"https://pypi.org/pypi/{PKG_NAME}/json", timeout=5) return resp.json()["info"]["version"] except Exception: # 网络异常时直接退出,不执行任何操作 return get_local_version() if __name__ == "__main__": local_ver = parse(get_local_version()) latest_ver = parse(get_latest_version()) if latest_ver > local_ver: # 存在新版本时才执行升级 subprocess.run( ["sudo", "pip3", "install", f"{PKG_NAME}=={latest_ver}", "--upgrade", "--no-cache-dir"], check=True )
- 配置systemd服务后台执行,不要设置为开机阻塞项,示例配置保存到
/etc/systemd/system/pkg_updater.service:
[Unit] Description=My Python Package Updater After=network.target [Service] Type=simple ExecStart=python3 /opt/pkg_updater.py User=root [Install] WantedBy=multi-user.target
- 执行
systemctl enable --now pkg_updater.service开启开机自启即可,脚本会在网络就绪后后台静默运行,完全不影响开机速度。如果需要更高的更新频率,可以额外加一条cron定时任务,比如每天凌晨执行一次脚本。
方案2:MQTT触发更新(适合对更新实时性要求高的场景)
如果需要新版本发布后短时间内全量设备升级,可以用MQTT推送更新通知:
- 部署一个轻量MQTT broker,所有设备预配置好MQTT客户端常驻后台
- 你每次发布新版本后,往指定主题推送新版本号
- 设备端收到推送后先比对本地版本,存在更新时再执行升级操作,平时完全不占用系统资源
额外优化建议
- 给树莓派的pip预先配置国内镜像源,有更新时可以大幅缩短下载安装耗时
- 条件允许的话尽量用虚拟环境安装你的Python包,避免全局sudo安装带来的依赖冲突问题
内容的提问来源于stack exchange,提问作者Zach
相关产品推荐
相关产品推荐

