安装PyBluez时wheel构建失败问题求助
解决PyBluez在Python 3.11下的安装失败问题
问题背景
尝试安装PyBluez时先后遇到两个错误:
- 编译阶段找不到
bluetooth/bluetooth.h头文件 - 安装
libbluetooth-dev后,又出现lvalue required as left operand of assignment编译错误
第一个错误的解决(已完成)
这个错误是缺少蓝牙开发依赖库,执行以下命令安装即可:
sudo apt-get install libbluetooth-dev
第二个错误的根源与解决
错误原因
PyBluez 0.23是较旧的版本,未适配Python 3.11中Py_TYPE宏的变更。在Python 3.11里,Py_TYPE不再是可直接赋值的左值,原代码中直接对指针使用Py_TYPE(&sock_type) = &PyType_Type;的写法会触发编译错误。
解决方案
提供三种可行方案,按需选择:
方案1:安装兼容Python 3.11的分支版本
使用维护更新的pybluez2包,它修复了Python 3.11的兼容性问题:
pip install pybluez2 --break-system-packages
方案2:手动修改源码编译安装
- 下载PyBluez源码包:
pip download pybluez --no-deps - 解压下载的
PyBluez-0.23.tar.gz文件,进入解压后的目录 - 编辑
bluez/btmodule.c文件,修改以下两行:- 将第2978行:
Py_TYPE(&sock_type) = &PyType_Type;改为:((PyTypeObject*)&sock_type)->ob_type = &PyType_Type; - 将第2979行:
Py_TYPE(&sdp_session_type) = &PyType_Type;改为:((PyTypeObject*)&sdp_session_type)->ob_type = &PyType_Type;
- 将第2978行:
- 执行本地安装:
pip install . --break-system-packages
方案3:降级Python版本
如果不需要Python 3.11的特性,可以降级到Python 3.10及以下版本,PyBluez 0.23原生支持这些版本。
内容的提问来源于stack exchange,提问作者Disguised Tiger
相关产品推荐
相关产品推荐

