Pyinstaller 拒绝包含 win10toast 库

问题描述 投票:0回答:1

我正在尝试制作一个简单的警报exe

import win10toast

toaster = win10toast.ToastNotifier()
toaster.show_toast("Title", "Testing alert")

使用 pyinstaller 和 bat 文件如下:

@echo off

cd /d "D:\General Software\PycharmProjects\Project1\venv\Scripts"

call activate.bat

cd /d "%~dp0"

pyinstaller --onefile alert_test.py

pause

但似乎 pyinstaller 不包含 win10toast,当我运行该程序时,我会收到此错误: pkg_resources.DistributionNotFound:未找到 'win10toast' 发行版,并且是应用程序所需的。即使我使用 --hidden-import win10toast 它仍然不起作用。

我知道我可以使用 onedir 然后手动复制库,但我想知道这里有什么问题。有谁知道为什么吗?

python pyinstaller
1个回答
0
投票

简单的解释是,pyinstaller 实际上并不是一个将 python 代码转换为机器代码(.exe 文件)的编译器,它实际上只是收集 python 代码,然后给它一个入口点。这就是为什么像 win10toast 这样的一些模块不能开箱即用的原因。

更长、可能更错误的解释是这样的:

普通的编译器只是读取代码,将其转换为 IR,然后将代码编译为计算机的编程语言,即机器代码。同时,pyinstaller 会浏览您的项目,根据需要收集它找到的所有文件,将它们放在一个文件夹中,然后收集所有 python 代码并使用可执行文件创建一个入口点(对于任何更有经验的程序员,我知道这不是'这是如何工作的,但这样更容易解释)。因此,有时它会错过一些不以常规方式导入或以与平常不同的方式工作的模块。例如,PyQt(基本上)只是一个编译成 python 的 C++ 程序,为了让 pyqt 正常工作,pyinstaller 社区必须解决大量问题。他们还没有研究过的一个例子是 win10toast,它是非常特定于操作系统的,并且似乎位于与正常 VENV 位置不同的位置。

© www.soinside.com 2019 - 2024. All rights reserved.