You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树莓派4B(Raspbian 11)安装rtmidi-python时PIP构建Wheel失败问题求助

解决树莓派Raspbian 11上安装rtmidi-python失败的问题

你遇到的问题核心是rtmidi-python包过于老旧(最后更新停留在2016年的0.2.2版本),完全不兼容Python3.9+的API变化,再加上安装时误用到Python2环境导致的无效安装。下面分原因和解决方案详细说明:

错误原因拆解

  1. tp_print属性已被移除:Python 3.8开始正式删除了PyTypeObject结构体中的tp_print成员,但rtmidi-python的代码还在尝试设置这个已废弃的属性,这是编译失败的直接原因。
  2. PyUnicode_GET_SIZE宏已废弃:Python3.3之后该宏被标记为废弃,Python3.9中彻底移除,替代API是PyUnicode_GetLength,这也是编译报错的触发点之一。
  3. 安装到了错误的Python环境:你执行sudo python setup.py install时,默认调用的是树莓派系统自带的Python2.7,导致安装包被放到了Python2的目录里,完全没作用在你需要的Python3.9环境上。

解决方案

方案一:使用活跃维护的替代包(强烈推荐)

rtmidi-python已经多年无人维护,建议直接切换到python-rtmidi——这是一个持续更新、兼容Python3.9+的RTMIDI绑定包,在树莓派上可以直接通过pip安装:

# 安装到用户目录(避免系统权限问题)
pip install --user python-rtmidi
# 若需要全局安装(不推荐,可能影响系统依赖)
sudo pip3 install python-rtmidi

这个包的API设计和rtmidi-python高度相似,迁移成本极低,还能彻底避免老旧包带来的兼容性隐患。

方案二:手动修复rtmidi-python的兼容性(仅当必须使用原包时)

如果你一定要用rtmidi-python,可以按照以下步骤修改源码并重新编译:

  1. 下载并解压rtmidi-python的源码包,进入解压后的目录。
  2. 找到rtmidi_python.pyx文件(这是Cython的源文件,编译后生成报错的rtmidi_python.cpp):
    • 搜索并删除所有包含tp_print = 0的行(比如__pyx_type_13rtmidi_python_MidiBase.tp_print = 0;这类代码)。
    • 搜索所有PyUnicode_GET_SIZE,替换成PyUnicode_GetLength。
  3. 先安装编译依赖,再用Python3重新编译安装:
# 安装编译所需的系统依赖
sudo apt-get install build-essential python3-dev libasound2-dev
# 编译并安装到用户目录
python3 setup.py build
python3 setup.py install --user

重要注意事项

  • 操作Python3.9环境时,始终用python3和pip3(或确认pip指向Python3),避免和系统自带的Python2混淆。
  • 尽量避免用sudo安装Python包,优先用--user参数安装到用户目录,减少权限冲突和系统依赖污染。

内容的提问来源于stack exchange,提问作者user18419131

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 15:33:10