You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 02:07:19