如何在Windows下的Python3.6中激活socket.AF_BLUETOOTH?
解决Windows下Python3.6 socket模块缺少AF_BLUETOOTH的问题
我之前在Windows上折腾过Python蓝牙socket的坑,刚好能给你一套详细的操作步骤,帮你解决这个AttributeError: module 'socket' has no attribute 'AF_BLUETOOTH'的问题。
问题根源
Windows平台上官方预编译的Python3.6默认没有启用蓝牙socket相关的支持,所以socket模块里没有这些常量定义。要用上蓝牙功能,我们需要手动修改Python源码的头文件,然后重新编译Python。
详细操作步骤
1. 准备编译环境与源码
- 安装对应版本的Visual Studio:Python3.6是用Visual Studio 2015 Update 3编译的,所以你需要安装这个版本(或者兼容的VS2017,记得勾选C++开发工具组件)。
- 下载Python3.6源码:获取对应3.6.x版本的Python源码包,解压到本地任意目录(比如
D:\Python36-src)。
2. 修改源码中的头文件与模块代码
第一步:修改Include/socket.h
打开源码目录下的Include/socket.h文件,在其他AF_*宏定义的附近,添加以下代码:
#define AF_BLUETOOTH 32 #define SOCK_RFCOMM 3 #define BTPROTO_RFCOMM 3
注:这些数值是Windows平台蓝牙socket的标准定义,不要随意修改。
第二步:修改Modules/socketmodule.c
打开Modules/socketmodule.c文件,找到socket模块常量定义的代码段(可以搜索{"AF_INET"定位到附近区域),添加以下几行:
{"AF_BLUETOOTH", INT2PY(AF_BLUETOOTH)}, {"SOCK_RFCOMM", INT2PY(SOCK_RFCOMM)}, {"BTPROTO_RFCOMM", INT2PY(BTPROTO_RFCOMM)},
3. 编译Python
- 打开Visual Studio对应的命令提示符:比如安装VS2015的话,就打开
VS2015 x64 Native Tools Command Prompt(要编译32位版本就选32位的提示符)。 - 切换到Python源码目录:
cd D:\Python36-src - 执行编译命令:
PCbuild\build.bat -e
这个命令会编译生成带有完整扩展模块的Python版本,编译完成后,生成的
python.exe和相关库文件会在PCbuild\amd64(64位)或PCbuild(32位)目录下。
4. 验证功能
找到编译好的python.exe,运行它后执行以下代码测试:
import socket print(socket.AF_BLUETOOTH) print(socket.SOCK_RFCOMM) print(socket.BTPROTO_RFCOMM)
如果能正常输出对应的数值(32、3、3),就说明修改成功了,接下来你就可以使用蓝牙socket进行开发了。
内容的提问来源于stack exchange,提问作者WolfiG
相关产品推荐
相关产品推荐

