0

我一直在 win7 64bit python 3.4.3 上使用 pyttsx3。我使用 pyttsx3 模块制作的 .py 脚本一切都很好(单独工作正常)。

当我用 pyinstaller 编译它时,问题就来了。我收到一条错误消息,提示“找不到 pyttsx3.drivers”,我通过使用带有 .spec 的 .spec 文件修复了该问题hiddenimports。然后我收到一条错误消息pywintypes.com_error:(-2147352573,member not found,none,none)

我在 github 上发现名为 #natambashat 的人通过注释掉 pyi-rth-win32comgenpy.py 运行时钩子来修复它,因为这只需要 pyttsx。但这对我不起作用,我仍然遇到同样的错误。你能帮我么?

4

2 回答 2

1

您无法使用 pyinstaller 编译包含 pyttsx3 的脚本,因为 pyinstaller 像所有编译器一样没有每个python 模块。这是一个链接,显示了 pyinstaller 的所有兼容包。

另一种选择是py2exe。我不是 Windows 用户,所以我不知道如何使用它。但据说它支持 pyttsx。

另一个选项虽然未经我测试,是下载 pyttsx 源代码,将其放入您的项目目录,将其导入使用 pyttsx 的代码中,然后使用 pyinstaller 编译它:

pyinstaller --onefile app.py
于 2019-02-14T22:00:40.960 回答
1

尤里卡!!我修好了!我会一步一步地写下我所做的,以防有人遇到同样的问题。

1.我制作了一个hook-pyttsx3.py文件并注释掉了pyi-rth-win32comgenpy.py文件(看看这个github的链接。(而不是注释掉,你也可以删除行“win32:pyi- rth-win32comgenpy.py" 中的 rthooks.DAT 文件 ...Lib/sitepackages/pyinstaller/loader/rthooks)。

2.转到...Lib/sitepackages/Win32com/client/dynamic.py函数。_GetDeskInvokeType将最后一行(return invoke_type)替换为return varkind

-> 对于某些人来说,第 1 步有效,但对我来说,我需要应用第 2 步。我在 sourceforge 的某个地方找到了(我不记得链接),当编译涉及 win32、pywin32 版本 221 和 220 的脚本时,会pywintypes出现我提到的错误上面。但是 pywin32 版本 219 没有给出这个错误(我使用的是 pywin32 v221)。背后的原因是,在我在步骤 2 中提到的函数中,return invoke_type仅在版本 221 和 220 上,但 v219 上的返回是return varkind。我没有如果它给出这样的错误,我不知道为什么会出现这种差异!

编辑:这个链接比我上面给出的要好。

于 2019-02-15T16:09:30.083 回答