使用pynput编写键盘记录器遇ModuleNotFoundError问题求助
问题分析与解决方法
嘿,刚接触Python遇到这种问题很正常,我来帮你拆解清楚:
错误原因
你看报错信息第一行写着File "C:\Users\lenovo\Documents\pynput.py", line 1——你的脚本文件名是pynput.py,和要导入的第三方库重名了!
Python导入模块时会按固定顺序查找:先找当前脚本所在目录的文件/包,再去系统Python库目录找。所以当你执行from pynput.keyboard import Key时,Python误以为要导入的是你自己写的pynput.py,但这个文件根本不是包含keyboard子模块的包,自然就抛出错误了。
解决步骤
- 第一步:重命名你的脚本文件
把脚本从pynput.py改成不冲突的名字,比如my_key_logger.py,绝对不能和任何第三方库同名。 - 第二步:清理残留编译文件
检查脚本目录里有没有pynput.pyc或者__pycache__文件夹(这是Python自动生成的编译缓存),如果有直接删掉,不然Python还是会优先加载缓存里的错误文件。 - 第三步:修复路径转义问题(额外小提示)
你的日志文件路径"C:\Users\lenovo\Documents\log.txt"里的反斜杠\是Python的转义字符,可能导致路径解析失败,建议改成两种写法之一:- 双反斜杠:
"C:\\Users\\lenovo\\Documents\\log.txt" - 原始字符串:
r"C:\Users\lenovo\Documents\log.txt"
- 双反斜杠:
修正后的示例代码
from pynput.keyboard import Key, Listener import logging # 用原始字符串避免路径转义问题 file = r"C:\Users\lenovo\Documents\log.txt" logging.basicConfig(filename=file, level=logging.DEBUG, format='%(asctime)s: %(message)s') def on_press(key): logging.info(key) with Listener(on_press=on_press) as listener: listener.join()
做完这些步骤后,再运行脚本应该就能正常工作啦!
内容的提问来源于stack exchange,提问作者ahmed mellouk
相关产品推荐
相关产品推荐

