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

时间:2019-02-14 15:02:30

标签: python-3.x pyinstaller pyttsx

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

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

pyinstaller --onefile app.py

答案 1 :(得分:1)

尤里卡!我已解决问题!我要一步一步地写些什么,以防有人遇到相同的问题。

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函数。用return invoke_type替换最后一行(return varkind)。

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

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