Почему я не могу скомпилировать скрипт, содержащий pyttsx3? - PullRequest
0 голосов
/ 14 февраля 2019

Я работал с pyttsx3 на win7 64bit python 3.4.3.Все хорошо с .py скриптом, который я сделал с помощью модуля pyttsx3 (работает в одиночку).

Проблема возникает, когда я компилирую ее с помощью pyinstaller.Я получил сообщение об ошибке «pyttsx3.drivers not found» и исправил это, используя файл .spec с hiddenimports.Тогда я получил ошибку, которая говорит pywintypes.com_error:(-2147352573,member not found,none,none).

Я обнаружил на github, что кто-то с именем #natambashat исправил это, закомментировав хук времени выполнения pyi-rth-win32comgenpy.py, потому что это нужно только для pyttsx.Но это не сработало для меня, я все еще получаю ту же ошибку.Не могли бы вы помочь мне?

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

Эврика! Я исправил это!Я напишу, что я сделал, шаг за шагом, если кто-нибудь столкнется с той же проблемой.

1.i сделал файл 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работает, но мне нужно применить step2.Я нашел где-то в sourceforge (я не помню ссылку), при компиляции скрипта, включающего win32, версии 221 и 220 pywin32 выдают ошибку pywintypes, о которой я упоминал выше. Но версия pywin32219 не дает этой ошибки (я использую pywin32 v221). И причина этого в том, что в функции, упомянутой на шаге 2, return invoke_type только для версий 221 и 220, но возврат на v219 равен return varkind.Не знаю, почему возникла такая разница, если она дает такие ошибки!

РЕДАКТИРОВАТЬ: Эта ссылка Лучше, чем я дал выше.

0 голосов
/ 15 февраля 2019

Вы не можете скомпилировать скрипт, содержащий pyttsx3, с помощью pyinstaller, потому что pyinstaller, как и все компиляторы, не имеет каждого модуля python.Вот ссылка , которая показывает все совместимые пакеты для pyinstaller.

Другой вариант - py2exe .Я не пользователь Windows, поэтому я не знаю, как его использовать.Но он предположительно поддерживает pyttsx.

Другой вариант, хотя я и не тестировал его, - это загрузить исходный код pyttsx, поместить его в каталог вашего проекта, импортировать его в код, который использует pyttsx, а затем скомпилировать его с помощью pyinstaller, используя:

pyinstaller --onefile app.py
...