pyautogui脚本正常运行,pyinstaller打包为exe后报错如何解决?
问题原因
locateOnScreen方法的confidence参数依赖OpenCV库实现,你本地Python环境已安装opencv-python所以直接运行脚本正常,但PyInstaller 5.0打包时默认不会将PyScreeze(pyautogui依赖的底层图像识别库)所需的cv2模块依赖打入exe包,运行时检测不到OpenCV就会自动切换到纯Python实现的识别逻辑,该逻辑不支持confidence参数,因此触发报错。
解决方案
- 先确认本地环境已安装OpenCV依赖,未安装可执行命令:
pip install opencv-python - 打包时显式指定导入cv2隐藏模块,避免PyInstaller漏打依赖,示例打包命令如下(将原命令对应替换即可):
pyinstaller -F --hidden-import cv2 interface.py - 同时需要处理静态图片的路径寻址问题,否则打包后exe会找不到你调用的PNG图片:
- 先在代码中新增路径适配函数,替换原有硬编码的相对路径写法:
import sys import os def get_resource_path(relative_path): # 适配打包运行和本地脚本运行两种场景的路径寻址 if getattr(sys, 'frozen', False): base_path = sys._MEIPASS else: base_path = os.path.abspath(".") return os.path.join(base_path, relative_path) # 调用locateOnScreen时使用适配后的路径 ScreenLocation = pa.locateOnScreen(get_resource_path(r'module\images\location.PNG'), confidence=0.7)
- 打包时添加参数将图片目录一起打入包中,Windows环境下完整打包命令示例:
pyinstaller -F --hidden-import cv2 --add-data "module/images/*;module/images/" interface.py
- 若调整后仍报错,可尝试降级OpenCV版本适配PyInstaller 5.0,执行命令后重新打包即可:
pip install opencv-python==4.5.5.62
内容的提问来源于stack exchange,提问作者user13757468
相关产品推荐
相关产品推荐

