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

PyInstaller--onefile打包后,如何正确指定PIL加载的图标文件路径?

解决PyInstaller --onefile模式下pystray图标找不到的问题

问题根源

--onefile模式下,PyInstaller会把所有资源打包进单个exe,运行时自动解压到系统临时目录,而os.getcwd()获取的是你启动exe的当前工作目录,不是临时解压目录,所以找不到图标文件。

解决步骤

1. 修改代码获取正确路径

替换原来的路径获取方式,用PyInstaller提供的sys._MEIPASS变量获取临时解压目录:

import pystray
from PIL import Image
import os
import sys

# 定义资源路径获取函数
def resource_path(relative_path):
    try:
        # 打包后运行时,指向临时解压目录
        base_path = sys._MEIPASS
    except Exception:
        # 未打包时,指向当前工作目录
        base_path = os.path.abspath(".")
    return os.path.join(base_path, relative_path)

# 用resource_path获取图标路径
menuImg = Image.open(resource_path('icon.png'))

MenuIcon = pystray.Icon('Neural', menuImg, menu=pystray.Menu(
    pystray.MenuItem('Exit', HandleTrayClick),
))

MenuIcon.run()

2. 配置auto-py-to-exe打包参数

打开auto-py-to-exe:

  • 在Additional Files区域,点击Add Files选择你的icon.png
  • 确保该文件的Destination留空(或设为.),这样打包时会把图标文件纳入资源,运行时解压到临时目录

3. 重新打包

按正常流程选择--onefile模式,完成打包后运行exe即可正常加载图标。

内容的提问来源于stack exchange,提问作者Collaxd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 07:30:55