PyInstaller打包exe双击报IndexError,命令行运行正常问题求助
解决方案:双击PyInstaller打包exe时索引越界问题
核心原因
双击exe时,程序的工作目录并非exe所在的dist文件夹,而是系统默认的用户目录(如C:\Users\你的用户名),导致folder_path指向的images文件夹不存在,os.walk()返回空列表,引发IndexError。而命令行运行时,工作目录与exe所在目录一致,路径正确。
修复步骤
1. 修正资源路径获取逻辑
不管运行环境(IDE、命令行、打包后exe),都能正确定位打包后的资源:
import os import sys def get_resource_path(relative_path): # PyInstaller打包后会把资源放在sys._MEIPASS临时目录 if hasattr(sys, '_MEIPASS'): return os.path.join(sys._MEIPASS, relative_path) # 非打包环境,用当前脚本所在目录拼接相对路径 return os.path.join(os.path.dirname(os.path.abspath(__file__)), relative_path) # 替换原folder_path的定义 folder_path = get_resource_path("images")
2. 增加代码容错,避免索引越界
在get_items_dict函数中先检查路径有效性,处理空遍历结果:
from os import walk def get_items_dict(folder_path): # 先确认文件夹存在 if not os.path.isdir(folder_path): print(f"错误:未找到文件夹 {folder_path}") return {} # 或返回符合业务逻辑的默认值 walk_result = list(walk(folder_path)) if not walk_result: images_paths = [] else: images_paths = walk_result[0][2] # 后续业务逻辑...
3. 简化PyInstaller打包命令(可选)
PyInstaller通常能自动识别customtkinter依赖,无需手动指定其路径,简化命令:
PyInstaller checklist_app2.py --add-data "images;images" --add-data "assets;assets" --window --noupx
4. 验证打包后的资源
打包完成后,检查dist\checklist_app2目录下是否存在images文件夹,且包含所需文件。
内容的提问来源于stack exchange,提问作者Clock
相关产品推荐
相关产品推荐

