ImageConverter.py转Exe后无法生成JPEG文件,求助排查问题
问题排查与解决方案
从终端输出的[]可以直接看出,程序运行时没有找到任何PNG文件,核心原因是PyInstaller --onefile模式的运行机制和你代码里的路径处理逻辑不匹配:
1. 路径处理错误的根源
当用--onefile打包时,PyInstaller会把exe解压到系统临时目录(比如C:\Users\<用户名>\AppData\Local\Temp\_MEIxxxxxx)再运行,此时sys.executable指向的是临时目录里的exe文件,而不是你放在dist目录的那个。你的代码没有切换到实际exe所在的dist目录,所以glob.glob("*.png")搜索的是临时目录,自然找不到文件。
2. 修复代码的具体步骤
修改你的ImageConverter.py代码,正确获取exe实际所在目录并切换工作目录:
from PIL import Image import glob import os import sys # 获取程序实际所在目录 if getattr(sys, 'frozen', False): # 打包成exe后的情况 application_path = os.path.dirname(sys.executable) else: # 直接运行py文件的情况 application_path = os.path.dirname(os.path.abspath(__file__)) # 切换工作目录到程序所在目录 os.chdir(application_path) print(f"当前工作目录: {os.getcwd()}") print(f"找到的PNG文件: {glob.glob('*.png')}") for file in glob.glob("*.png"): im = Image.open(file) rgb_im = im.convert("RGB") rgb_im.save(file.replace("png", "jpeg"), quality=95)
3. 额外验证步骤
- 重新打包:运行
pyinstaller --onefile ImageConverter.py,替换dist目录里的旧exe。 - 确认文件位置:确保PNG文件和新exe放在同一个dist目录下,文件名后缀是小写的
.png(glob默认区分大小写,若需要兼容大写,可改用glob.glob('*.[pP][nN][gG]'))。 - 查看输出:运行exe后,终端会打印当前工作目录和找到的PNG文件,确认是否和dist目录一致、是否正确识别到文件。
4. 补充说明
你的代码里最后一行output_path = os.path.join(application_path, f'images')没有实际使用,如果是计划把转换后的文件放到images子目录,需要在保存时使用这个路径:
# 创建images目录(如果不存在) os.makedirs(output_path, exist_ok=True) # 保存到images目录 rgb_im.save(os.path.join(output_path, file.replace("png", "jpeg")), quality=95)
内容的提问来源于stack exchange,提问作者BobbyG
相关产品推荐
相关产品推荐

