pynput全局热键报错:'_thread._ThreadHandle'对象不可调用
解决pynput全局热键在Python3.13 macOS下的TypeError问题
问题原因
Python 3.13对_thread模块的API做了改动,其中_thread._ThreadHandle对象不再是可调用类型,而旧版本的pynput尚未适配这个变化,导致在macOS平台触发该错误。
解决方案
1. 降级Python版本(最快速方案)
将Python版本切换到3.12或更早版本,你的代码在这些版本下可以正常运行。如果使用虚拟环境,执行以下步骤:
- 删除现有虚拟环境:
rm -rf my-venv - 用Python3.12创建新虚拟环境:
python3.12 -m venv my-venv - 激活虚拟环境:
source my-venv/bin/activate - 重新安装pynput:
pip install pynput
2. 临时修改pynput源码(适配Python3.13)
如果不想降级Python,可以手动修改pynput的适配代码:
- 找到pynput安装路径下的
pynput/_util/darwin.py文件(路径类似你报错里的/Users/name/workspace/.../my-venv/lib/python3.13/site-packages/pynput/_util/darwin.py) - 定位到报错的
_handler方法(第283行附近),检查self._handle的赋值逻辑。如果是错误地将线程句柄赋值给了self._handle,需要修正为保存实际的事件处理函数,而非线程句柄。
3. 等待pynput官方更新
等待pynput发布适配Python3.13的正式版本,之后直接升级pynput即可:pip install --upgrade pynput
内容的提问来源于stack exchange,提问作者JulianG
相关产品推荐
相关产品推荐

