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

MacOS运行Python蓝牙代码报lightblue无finddevices属性错误

问题原因

这个报错和代码逻辑无关,核心是依赖安装错误:

  1. 你通过pip install python-lightblue装到的是PyPI上的同名占位无效包,根本不是PyBluez(即你导入的bluetooth模块)在macOS下需要的底层lightblue框架,这个包内不存在finddevices接口。
  2. 原生lightblue框架是Python2时代的遗留项目,官方从未发布适配Python3的PyPI安装包;且macOS 12(Monterey)及以上版本已经废弃了PyBluez依赖的老式系统蓝牙API,就算强行装上老版本lightblue,大概率也会出现扫描不到设备、权限报错等问题。
解决方法

推荐方案:换用macOS原生兼容的蓝牙库(适配所有新版macOS+Python3)

这是目前成本最低、稳定性最高的方案,不需要折腾停止维护的老旧依赖:

  • 第一步先清理错误安装的包:
pip uninstall -y pybluez python-lightblue lightblue
  • 第二步安装bleak,这是目前维护最活跃的跨平台Python蓝牙库,在macOS上直接调用系统原生蓝牙框架,不需要额外安装编译依赖:
pip install bleak
  • 第三步替换原有扫描代码,参考示例:
import asyncio
from bleak import BleakScanner

async def main():
    # 扫描时长8秒,和原代码duration参数对应
    nearby_devices = await BleakScanner.discover(timeout=8)
    for dev in nearby_devices:
        print(f"设备标识:{dev.address},设备名称:{dev.name},信号强度:{dev.rssi}dBm")
    return nearby_devices

if __name__ == "__main__":
    device_list = asyncio.run(main())

注意:第一次运行代码时系统会弹出蓝牙权限申请,必须给运行代码的终端/IDE开启蓝牙权限,设置路径为「系统设置-隐私与安全性-蓝牙」,未开权限会直接返回空的设备列表。

不推荐方案:硬适配原有PyBluez代码(仅支持macOS 11及以下老系统)

如果一定要保留原有PyBluez代码逻辑,不要通过pip安装lightblue:

  1. 先安装Xcode编译依赖:执行命令xcode-select --install
  2. 卸载所有已安装的lightblue相关pip包
  3. 本地编译安装社区维护的适配Python3的lightblue分支,安装完成后原代码即可运行。该方案在新macOS系统上兼容性极差,不建议花费时间折腾。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 13:03:21