ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

MediaPipe 在 Python 3.7 上跑通:3 处修改绕开依赖冲突与语法报错

MediaPipe 在 Python 3.7 上跑通:3 处修改绕开依赖冲突与语法报错 MediaPipe 在 Python 3.7 上跑通3 处修改绕开依赖冲突与语法报错【免费下载链接】mediapipeCross-platform, customizable ML solutions for live and streaming media.项目地址: https://gitcode.com/GitHub_Trending/med/mediapipe装 MediaPipe 一直卡在protobuf版本不匹配这篇教程用 3 处修改解决 MediaPipe 的 Python 3.7 兼容问题把冲突依赖降回 3.7 能装的版本、放宽 setup.py 的 Python 版本声明、改写源码里 3.8 才支持的语法最后用一个摄像头手部检测示例确认整条链路可用。改动清单一览表#改哪里改成什么为什么1requirements.txt新增protobuf3.20.1、numpy2新版 protobuf 没有 Python 3.7 的 wheel依赖解析直接失败numpy 2.x 也不支持 3.72setup.py 的classifiers加入Programming Language :: Python :: 3.7官方支持列表只到 3.9补上 3.7 让安装声明与实际环境一致3setup.py 的setuptools.setup()参数新增python_requires3.7否则 pip 会按版本声明拒绝在 3.7 下安装4mediapipe/python/下的源码3.8 语法如海象运算符:改写为等价旧写法3.7 解释器遇到新语法直接抛SyntaxError先有这张表后文每一步都能对得上号。为什么它装不上三处官方证据证据一setup.py 的 classifiers 只声明了 3.9 起步。classifiers[ # ... Programming Language :: Python :: 3.9, Programming Language :: Python :: 3.10, Programming Language :: Python :: 3.11, Programming Language :: Python :: 3.12, Programming Language :: Python :: 3 :: Only, ],所以结论是Python 3.7 不在官方支持矩阵里官方不会为 3.7 出预编译包也不会排查 3.7 下的 bug。证据二requirements.txt 的依赖约束按新版解释器写的。absl-py~2.3 certifi numpy sounddevice~0.5 flatbuffers~25.9 opencv-contrib-python matplotlibnumpy未设上限pip 会去拉 numpy 2.x 与新版 protobuf而它们都没有 Python 3.7 的发布版本。所以结论是不改约束pip 的依赖解析阶段就过不了轮不到跑代码。证据三安装与运行时的典型报错长这样。ERROR: Could not find a version that satisfies the requirement protobuf4.25.3 ERROR: No matching distribution found for protobuf4.25.3 SyntaxError: invalid syntax # 运行时报在 mediapipe/python 下的 3.8 语法处 ImportError: cannot import name Packet from mediapipe.python.packet所以结论是三类报错依赖冲突、语法错误、导入失败是同一根源的三种表象——环境版本低于包声明的下限而不是代码本身坏了。按顺序执行的四处修改顺序很重要先锁依赖再改声明最后动源码。顺序反了会反复重装。把 protobuf 降级到 3.20.1并把 numpy 卡在 2 以下改什么requirements.txt。怎么改在文件里固定住这两个冲突依赖其余保持原样absl-py~2.3 certifi numpy2 sounddevice~0.5 flatbuffers~25.9 opencv-contrib-python matplotlib protobuf3.20.1为什么这样改3.20.1 是仍提供 Python 3.7 wheel 的 protobuf 3.x 版本MediaPipe 的 Python 侧代码只用到google.protobuf的基础 API在 3.x 上能正常编译生成的 pb2 文件numpy2保证拿到的是 1.x 系列3.7 有对应 wheel。在 setup.py 的 classifiers 里补上 3.7并加 python_requires改什么setup.py 底部的setuptools.setup()调用。怎么改在classifiers列表里加一行再在参数区新增python_requiresclassifiers[ # ... Programming Language :: Python :: 3.7, Programming Language :: Python :: 3.9, # ... ], python_requires3.7,为什么这样改classifiers是元数据声明补上 3.7 让包描述与实际运行环境一致python_requires才是 pip 做版本门禁的依据放宽到3.7后pip install .不会再以Python 版本不符为由直接拒绝安装。把 3.8 语法改写成 3.7 能解析的等价写法改什么mediapipe/python/下所有会随包分发的.py文件重点排查 mediapipe/python/solution_base.py 这类核心模块。怎么改用grep -rn : mediapipe/python定位海象运算符改成先赋值、再判断的两行写法# 3.8 写法3.7 会直接 SyntaxError if (packet : self._graph_outputs.get(stream_name)) is not None: self._graph_outputs.pop(stream_name) # 等价改写 packet self._graph_outputs.get(stream_name) if packet is not None: self._graph_outputs.pop(stream_name)类型注解里的X | Y联合写法同理统一换成typing.Optional/typing.Union。为什么这样改3.7 解释器只认 3.7 之前的语法改写成旧写法不改变任何运行时行为是改动面最小、可回退的方式。重装并触发编译改什么安装动作本身源码不动。怎么改先清理旧环境残留再按顺序执行源码编译依赖 bazelsetup.py 会在构建阶段自动调用它pip uninstall -y mediapipe pip install -r requirements.txt pip install .为什么这样改前一步的pip install .会触发 Bazel 编译libmediapipe.so旧的已安装包若混着新版依赖会污染解析结果先卸载保证装进去的就是本次改造后的产物。一条命令验证是否跑通下面这个脚本是验证用的最小手部检测示例打开摄像头、逐帧跑 MediaPipe 的 Hands 模型、把关键点画回画面import cv2 import mediapipe as mp hands mp.solutions.hands.Hands() cap cv2.VideoCapture(0) while cap.isOpened(): ok, frame cap.read() if not ok: continue results hands.process(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)) if results.multi_hand_landmarks: for lm in results.multi_hand_landmarks: mp.solutions.drawing_utils.draw_landmarks( frame, lm, mp.solutions.hands.HAND_CONNECTIONS) cv2.imshow(hands, frame) if cv2.waitKey(5) 0xFF 27: break hands.close() cap.release()判成功只有一个标准窗口里能看到实时摄像头画面手伸进画面时 21 个关键点连线跟着手移动按 Esc 能正常退出且无异常堆栈。看到这就是 Python 3.7 兼容改造生效了。上线前必须知道的三个限制功能受限依赖停在 protobuf 3.20.1、numpy 1.x 之后依赖新版接口的高级功能如新版 Tasks API 的部分能力可能导入失败或行为不一致用到哪算哪。安全风险旧版本依赖不再有安全补丁生产环境等于在带已知漏洞运行仅限本地验证、演示类场景。长期应升级版本这套改造没有官方维护MediaPipe 每个大版本都可能引入新的 3.8 语法跟着修不如把环境升到 Python 3.9一步到位。这是非官方支持的兼容性改造能跑不等于被支持等环境允许直接升到 3.9 或更高这套补丁全部作废。官方 Python 安装与排错说明见 docs/getting_started/python.md。【免费下载链接】mediapipeCross-platform, customizable ML solutions for live and streaming media.项目地址: https://gitcode.com/GitHub_Trending/med/mediapipe创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表