Python打包单文件exe内置chromedriver运行Selenium脚本报错问题咨询
问题根因
PyInstaller(auto-py-to-exe 是其图形化封装工具)的单文件模式运行逻辑为:启动时将所有打包的依赖资源解压到系统临时目录的随机文件夹中。你代码中硬编码的相对路径.chromedriver.exe会读取exe运行的当前工作目录,而非临时解压目录,因此无法找到驱动文件,触发FileNotFoundError报错。
修复步骤
1. 代码层适配打包环境
第一步:新增依赖导入
在代码开头加入sys、os模块导入:
import sys import os
第二步:新增资源路径适配函数
添加函数自动识别运行环境,返回正确的资源路径:
def get_resource_path(relative_path): try: # PyInstaller 单文件运行时自动赋值该变量,指向临时解压目录 base_path = sys._MEIPASS except Exception: # 开发环境下取当前脚本所在目录为根路径 base_path = os.path.abspath(".") return os.path.join(base_path, relative_path)
第三步:修正驱动路径定义
将原来硬编码的驱动路径替换为适配后的路径:
paths = { '96': get_resource_path('chromedriver.exe'), # 若有其他版本驱动,按相同格式添加即可 }
第四步:修正现有代码bug
你当前代码的Open File事件中存在变量名错误,将:
csv_file_selected = sg.popup_get_file('Choose your file')
修改为:
folder_or_file = sg.popup_get_file('Choose your file')
否则选中CSV文件后变量不会被正确赋值,后续提交也无法读取文件。
2. 打包配置修改
打开auto-py-to-exe进行如下配置:
- 选择「单文件」打包模式
- 切换到「附加文件」选项卡,点击「添加文件」,选择你本地的
chromedriver.exe,目标路径填.(代表将驱动文件解压到临时目录的根路径) - 其他配置保持默认,点击打包即可。
打包完成后的单文件exe即可正常调用chromedriver运行。
内容的提问来源于stack exchange,提问作者RawalD
相关产品推荐
相关产品推荐

