使用PyInstaller打包含key.json的Python项目后控制台闪退如何修复?
问题修复方案
核心原因
你之前的推测是正确的,问题确实出在key.json未被正确包含进可执行文件导致的启动失败,具体触发闪退的原因有两点:
- 代码启动时直接调用
os.stat('key.json'),如果文件不存在会直接抛出FileNotFoundError导致程序直接终止,控制台闪退 - PyInstaller单文件模式默认不会自动打包项目中的非代码文件,打包后的exe运行时找不到
key.json直接崩溃
修复步骤
1. 优化代码异常处理逻辑
首先修改代码的文件判断逻辑,避免文件不存在时直接报错,同时适配PyInstaller的运行环境:
import random import json import os import sys # 适配PyInstaller打包后的资源路径读取 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) file_path = get_resource_path('key.json') char = 0 letters = list('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%&*?+-') # 新增判断:文件不存在则先创建空文件 if not os.path.exists(file_path): open(file_path, 'w').close() # 原来的stat判断逻辑和后续代码保持不变
2. 执行打包命令
打包时添加参数将key.json打包到可执行文件中:
- Windows系统执行命令:
pyinstaller -F --add-data "key.json;." main.py - Mac/Linux系统执行命令:
pyinstaller -F --add-data "key.json:." main.py
3. 可选方案(无需打包key.json)
如果不想把key.json打包进exe,也可以打包完成后,将项目里的key.json和生成的exe放在同一目录下,直接运行exe即可正常读取文件。
通用排查技巧
后续遇到PyInstaller打包后闪退问题,可先打开系统命令行工具,将exe文件拖入命令行窗口后回车运行,即可看到完整的报错信息,方便快速定位问题。
内容的提问来源于stack exchange,提问作者NewToPython
相关产品推荐
相关产品推荐

