pyinstaller打包exe后的模块未导入问题

我的脚本里引入了两个第三方库player和openpyxl

from openpyxl import load_workbook
from plyer import notification

一开始使用pyinstaller main.py打包过后,在cmd中运行main.exe报错

ModuleNotFoundError: No module named 'plyer.'

在了资料之后,用了以下办法:

  1. 加上第三方库的路径:pyinstaller main.py -P xxxxxxxx
  2. 在pyinstaller文件的hooks文件里加上了hook-player.py和hook-openpyxl.py文件
    最后运行报错变成了
Traceback (most recent call last):
  File "plyer\utils.py", line 93, in _ensure_obj
ModuleNotFoundError: No module named 'plyer.platforms'
Traceback (most recent call last):
  File "main.py", line 5, in <module>
  File "plyer\facades\notification.py", line 79, in notify
  File "plyer\facades\notification.py", line 88, in _notify
NotImplementedError: No usable implementation found!
[2816] Failed to execute script 'main' due to unhandled exception!

求解答.

这个不是pyinstaller的问题,而是plyer这个库的问题,这是个兼容win、linux、macosx和Android的一个第三方包,虽然导入的时候都可以是用这个代码

from plyer import notification

但是实际运行的时候是根据运行的平台不同,调用不同的函数的,像我用的是windows系统,所以这个库运行到我写的

notification.notify(
    title='测试',
    message='测试成功',
    timeout=10
)

这个代码的时候会从plyer.platforms.win.notification.WindowsNotification这个函数中调用运行,所以需要在打包时用以下代码

pyinstaller main.py --hidden-import plyer.platforms.win.notification 

而不是

pyinstaller main.py --hidden-import plyer

pyinstaller 的老问题了
加两句,再打包试试

import openpyxl  
import  plyer