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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 16:56:03