Python使用plyer实现通知功能 经PyInstaller打包exe后崩溃如何解决?
喝水提醒程序PyInstaller打包后通知崩溃解决方案
- 第一步:简化代码验证核心功能
首先去掉可能有兼容性问题的app_icon和toast参数,先验证通知功能本身打包后是否可以正常运行:
# 修改后的通知调用代码 notification.notify(title=title, message=message, timeout=10)
用基础打包命令pyinstaller 你的脚本名.py打包测试,如果运行正常,说明问题出在图标路径或者toast参数上。
- 第二步:修复图标路径问题
你代码中使用相对路径读取icon.ico,打包后exe运行时无法正确定位对应文件,需要修改资源读取逻辑,同时打包时把图标文件一起打入程序:
首先在代码开头新增资源路径解析函数:
from plyer import notification import time import sys import os # 新增资源路径解析函数,兼容开发环境和打包后的运行环境 def resource_path(relative_path): try: # PyInstaller打包后运行时的临时文件夹路径 base_path = sys._MEIPASS except Exception: # 开发环境下的当前脚本所在路径 base_path = os.path.abspath(".") return os.path.join(base_path, relative_path)
然后修改通知调用的图标参数:
notification.notify(title=title, message=message, app_icon= resource_path('icon.ico'), timeout=10, toast=True)
- 第三步:补全打包时缺失的依赖
PyInstaller无法自动识别plyer的平台专属依赖,打包时需要手动添加隐藏导入,完整打包命令如下:
pyinstaller --onefile --add-data "icon.ico;." --hidden-import plyer.platforms.win.notification 你的脚本名.py
注意:如果你不需要保留控制台窗口,可以在命令中添加
-w参数,调试阶段建议先不要加,方便运行时查看报错信息快速定位问题。
- 额外兼容方案
如果修改后toast参数仍然导致崩溃,可以直接删除toast=True参数,plyer会自动适配当前系统的通知样式,兼容性更好。
内容的提问来源于stack exchange,提问作者Varnith Varma
相关产品推荐
相关产品推荐

