py转exe后提示No module named keyboard及pynput按键报错如何解决
pynput按键监听报错解决
你看到的TypeError是因为pynput的按键回调传入的是KeyCode对象,不能直接转int,需要先取它的char属性再做转换。同时补充边界判断避免功能按键触发异常,修改后的代码如下:
from pynput.mouse import Button, Controller as MouseController from pynput.keyboard import Key, Controller as KeyboardController, Listener, KeyCode # 初始化控制器,分开命名避免混淆 mouse = MouseController() keyboard = KeyboardController() # 读取账号密码文件,建议加编码参数避免乱码 with open("parolochetach.txt", "r", encoding="utf-8") as f: list_of_lists = [line.strip().split() for line in f if line.strip()] def on_press(key): # 只处理可输入的字符按键,过滤shift、esc等功能键 if not hasattr(key, "char") or key.char is None: return # 只响应1-9的数字按键 if not key.char.isdigit(): return number = int(key.char) if number <1 or number>9: return # 修正原逻辑的越界问题:列表索引最大为len-1,所以必须number-1 < 列表长度 if number - 1 >= len(list_of_lists): return # 执行输入逻辑 mouse.position = (404, 415) mouse.click(Button.left) keyboard.type(list_of_lists[number-1][0]) mouse.position = (404, 465) mouse.click(Button.left) keyboard.type(list_of_lists[number-1][1]) keyboard.press(Key.enter) keyboard.release(Key.enter) # 启动全局监听 with Listener(on_press=on_press) as listener: listener.join()
auto-py-to-exe打包异常解决
按以下步骤操作即可解决打包后的运行问题:
- 优先使用上面修改后的全pynput代码打包,避免keyboard模块的权限兼容问题
- 打开auto-py-to-exe后,先选择你的脚本文件
- 进入「附加文件」菜单,添加你的
parolochetach.txt文件,目标路径填写.(代表和exe同目录) - 进入「高级」菜单,在hidden-import栏添加以下内容(Windows系统):
如果你是Mac系统添加pynput.keyboard._win32 pynput.mouse._win32pynput.keyboard._darwin、pynput.mouse._darwin,Linux系统添加pynput.keyboard._xorg、pynput.mouse._xorg - 进入「设置」菜单,勾选「请求管理员权限」,全局按键监听需要管理员权限才能正常运行
- 打包模式先选「单目录」,打包完成后直接运行目录里的exe测试,没问题再切换为单exe模式打包
- 如果打包后还是提示缺模块,把报错的模块名也加到hidden-import里即可
内容的提问来源于stack exchange,提问作者Teodor Kovachev
相关产品推荐
相关产品推荐

