我一直在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才需要。但这对我没有用,我仍然遇到相同的错误。你能帮我吗?
答案 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比我给出的要好。