树莓派4B(Raspbian 11)安装rtmidi-python时PIP构建Wheel失败问题求助
解决树莓派Raspbian 11上安装rtmidi-python失败的问题
你遇到的问题核心是rtmidi-python包过于老旧(最后更新停留在2016年的0.2.2版本),完全不兼容Python3.9+的API变化,再加上安装时误用到Python2环境导致的无效安装。下面分原因和解决方案详细说明:
错误原因拆解
tp_print属性已被移除:Python 3.8开始正式删除了PyTypeObject结构体中的tp_print成员,但rtmidi-python的代码还在尝试设置这个已废弃的属性,这是编译失败的直接原因。PyUnicode_GET_SIZE宏已废弃:Python3.3之后该宏被标记为废弃,Python3.9中彻底移除,替代API是PyUnicode_GetLength,这也是编译报错的触发点之一。- 安装到了错误的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,可以按照以下步骤修改源码并重新编译:
- 下载并解压rtmidi-python的源码包,进入解压后的目录。
- 找到
rtmidi_python.pyx文件(这是Cython的源文件,编译后生成报错的rtmidi_python.cpp):- 搜索并删除所有包含
tp_print = 0的行(比如__pyx_type_13rtmidi_python_MidiBase.tp_print = 0;这类代码)。 - 搜索所有
PyUnicode_GET_SIZE,替换成PyUnicode_GetLength。
- 搜索并删除所有包含
- 先安装编译依赖,再用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
相关产品推荐
相关产品推荐

