PyInstaller打包含PyBluez的Python脚本时提示widcomm.py缺失
PyInstaller 打包 PyBluez 0.30 脚本报 widcomm.py 缺失解决方案
报错根因
PyBluez 0.30 的 Windows 平台安装包为 egg 压缩格式,PyInstaller 扫描依赖时会按源码目录结构检索全量蓝牙栈适配文件,但该版本 Windows 发行版已经裁剪了几乎淘汰的 Widcomm(博通)蓝牙栈适配代码,未内置widcomm.py文件,强制检索时直接触发文件不存在报错。该问题仅在打包阶段触发,不影响脚本本身在Python环境下的正常运行。
解决步骤
- 方案一(最快,1分钟解决):
- 定位到Python第三方包目录:
C:\Users\X\Python3\lib\site-packages\,找到pybluez-0.30-py3.10-win-amd64.egg文件,将后缀名修改为.zip后解压到当前目录,解压完成后该目录下会生成独立的bluetooth源码文件夹。 - 进入解压得到的
bluetooth文件夹,新建名为widcomm.py的空白文本文件。Windows 10/11环境下PyBluez默认调用微软官方蓝牙栈和ESP32通信,不会触发Widcomm栈相关逻辑,空白占位文件仅用于通过PyInstaller的依赖扫描,不会影响程序实际功能。 - 回到脚本所在目录重新执行打包命令即可,可附加参数过滤无用依赖减小生成的exe体积:
pyinstaller --onefile scriptname.py - 如果打包后运行exe提示蓝牙模块加载失败,追加参数把bluetooth目录手动打包进程序:
pyinstaller --onefile scriptname.py --add-data "C:\Users\X\Python3\lib\site-packages\bluetooth;bluetooth"
- 定位到Python第三方包目录:
- 方案二(无需手动改文件):
卸载当前通过二进制包安装的PyBluez,从源码重新安装,源码包会包含全量适配文件(含不会被实际调用的widcomm.py),执行以下命令后直接打包即可:pip uninstall -y pybluez pip install pybluez==0.30 --no-binary :all:
验证提示:打包完成后建议在无Python环境的Windows设备上测试蓝牙连接、数据收发功能,确认ESP32通信流程正常即可。
内容的提问来源于stack exchange,提问作者Finn
相关产品推荐
相关产品推荐

