为什么我不能编译包含 pyttsx3 的脚本?

Why can't I compile a script that contains pyttsx3?

我一直在 win7 64 位 python 3.4.3 上使用 pyttsx3。我使用 pyttsx3 模块制作的 .py 脚本一切都很好(单独运行良好)。

用pyinstaller编译的时候出现问题。我收到一条错误消息 "pyttsx3.drivers not found",我通过使用带有 hiddenimports 的 .spec 文件修复了该错误。然后我收到一个错误 pywintypes.com_error:(-2147352573,member not found,none,none)

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

您不能使用 pyinstaller 编译包含 pyttsx3 的脚本,因为像所有编译器一样,pyinstaller 没有 每个 python 模块。这里有一个 link 向您展示了 pyinstaller 的所有兼容包。

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

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

pyinstaller --onefile app.py

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

1.i 制作了一个 hook-pyttsx3.py 文件并注释掉了 pyi-rth-win32comgenpy.py 文件(查看 github 的 this link .(而不是注释掉,您还可以从 ...Lib/sitepackages/pyinstaller/loader/rthooks 中的 rthooks.DAT 文件中删除行 "win32:pyi-rth-win32comgenpy.py"。

2.go 到 ...Lib/sitepackages/Win32com/client/dynamic.py_GetDeskInvokeType function.Replace 最后一行 (return invoke_type) 与 return varkind.

->对于某些人来说,只需第 1 步即可,但对我而言,在编译涉及 win32 的脚本时,我需要应用在 sourceforge 某处找到的 step2.I(我不记得 link) ,pywin32 版本 221 和 220 给出了我提到的 pywintypes 错误 above.But pywin32 版本 219 没有给出这个错误(我使用的是 pywin32 v221)。这背后的原因是,在我在步骤 2 中提到的函数中,return invoke_type 仅在版本 221 和 220 上,但 v219 上的 return 是 return varkind。如果出现此类错误,我不知道为什么会出现这种差异!

编辑:This link 比上面我给出的要好。