发布时间:2026/9/2 10:34:50
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),仅供参考

相关新闻

2026/9/2 10:34:50

高中数学集合难点突破:含参集合空集讨论与分类解题框架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/2 10:34:50

一站式AI智能体平台怎么选?从五个维度教你做评测

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/2 10:44:53

TypePHP开源:PHP原生编译器如何打破性能天花板?

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/2 10:44:53

从项目实战到技术复盘:高并发系统性能优化全流程拆解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/2 10:44:53

WeChatMsg 免费搞定微信聊天记录导出,年度报告一键生成

WeChatMsg 免费搞定微信聊天记录导出,年度报告一键生成 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeCh…

2026/9/2 10:44:53

Swift与AppKit实战:打造macOS原生Markdown编辑器

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/1 16:02:17

vSound小提琴数字处理器实操指南:从接线到演出的完整配置

电小提琴或者原声小提琴插电演出,第一个绕不开的坎就是声音难听。原声琴的共鸣和空气感一旦进了拾音器,出来的往往是一坨干瘪、发尖、带着奇怪塑料味的信号。我当初第一次把琴接上乐队调音台,直接被主唱吐槽"你这声音像在锯钢丝"。…

2026/9/2 9:00:32

传感器接口IC如何攻克生物化学传感的微弱信号难题?

1. 从电极到比特流:为什么生物化学传感必须依赖专用接口IC 做生物化学传感的人都有过类似的经历:明明传感器本身性能很好,信号输出却一塌糊涂——噪声大、漂移明显、重复性差,怎么调都达不到预期。很多时候问题并不在传感器&#…

2026/9/2 8:41:06

STM32F411CEU6多通道ADC采集:扫描模式+DMA实现详解

1. 多通道 ADC 的用武之地把“Multichannel ADC”和“STM32F411CEU6”这两个关键字放在一起,其实就是嵌入式开发里最常遇到的一类需求:用一块不算贵的 MCU,同时采集多路模拟信号。STM32F411CEU6 是 48 引脚的 Cortex-M4F 主控,主频…

2026/9/2 0:03:41

单片机毕业设计-基于单片机与蓝牙通讯的输液状态监测终端设计与开发 基于 STM32 或 51 单片机的液位‑滴速‑温度多参数输液监护装置设计(024005)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/9/2 0:03:41

DeepSeek字幕翻译实战:从API调用到批量SRT转中文的完整方案

这次我们来看一个很实用的 DeepSeek 落地场景:用 DeepSeek 把英文视频字幕自动翻译成中文。具体案例是《恶魔君》1989 年第 28 集的英转中字幕任务,标题写得很直白,但背后其实是一整套可以复用的技术流程:字幕解析、模型调用、批量…

2026/9/2 0:03:41

用Python搭建搞笑语音助手:从语音识别到语音合成全教程

当你家里摆着一台天猫精灵,却总希望语音助手偶尔“不正经”一点,不用官方腔回答问题,而是张口就接几句搞笑段子,会是什么体验?我最近动手验证了一下这个想法——没有去改装任何市面上现有的智能音箱,而是直…

2026/9/2 1:15:22

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/2 1:15:22

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/2 1:15:20

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…