[Python-es] Problema con py2exe y pywin32 al usar SAPI5
manuel
manuelcortez00 en gmail.com
Lun Dic 17 22:44:31 CET 2012
Hola,
Verán, estoy desarrollando una aplicación de aprendizaje de teclado
mediante voz. Para esto, uso python-gi en Debian, que conecta con gtk3,
y Pygtk en Windows. El tema de la voz lo llevo diferente en cada
plataforma, ya que en Debian puedo disponer de Speech Dispatcher, y en
Windows acceder a Microsoft SAPI 5, mediante pywin32.
La aplicación funciona muy bien en Debian, y si no se compila, también
en Windows. El problema viene al intentar generar una versión compilada
o distribuible (no es como si le entregues el programa a un usuario,
además de tener que instalarle python, pywin32, pygtk, pyGObject, etc,
etc, etc). Para esto uso py2exe.
Antes que nada, adjunto una parte del código de lo que uso para tomar la
voz de SAPI5, porque creo que ahí está el problema. Si alguien cree que
no, puedo poner lo que sea de código. Esto es lo que uso de pywin32:
import win32com.client
from win32com.client import Dispatch as dispatch
from win32com.client import constants
clas speak()
# inicializaciones y cosas así
self.tts = dispatch("SAPI.SpVoice")
...
def say(self, text, stopSignal=0):
if stopSignal == 0:
self.tts.Speak("", constants.SVSFPurgeBeforeSpeak)
self.tts.Speak(text, 1)
Bueno, el detalle funciona. El stopSignal me dice si la aplicación que
llama al tts quiere interrumpir la voz si hay algo que se esté
ejecutando de lo mismo, si no es 0, se espera a que termine de decir lo
que decía, y si es diferente, lo detiene y corta el habla para comenzar
él. Aquí, lo que uso de constants es la constante SVSFPurgeBeforeSpeak,
y a continuación sigo con el problema.
Todo funciona excelente siempre y cuando lo ejecute desde Python con
todo instalado, pero, al compilarlo con py2exe, el programa se ejecuta,
al menos la ventana, y cuando debería empezar a hablar, no lo hace, y me
escribe un archivo con errores, este es el contenido del archivo:
Traceback (most recent call last):
File "gtk_main.py", line 39, in say_widget
File "tts.pyc", line 31, in say
File "win32com\client\__init__.pyc", line 170, in __getattr__
AttributeError: SVSFPurgeBeforeSpeak
Y este el archivo setup.py, que usé para la compilación:
setup(name="DANI",
version="0.91-alfa2",
description="Asistente de aprendizaje de teclado",
author="Manuel Cortez",
author_email="manuelcortez00 en gmail.com",
url="http://code.google.com/p/wcalc",
license="GPL",
scripts=["tts.py", "keyboardexplorer.py", "about.py", "lesson.py"],
windows = ["gtk_main.py"],
options={'py2exe': dict(includes=['cairo', 'gio', 'pango', 'pangocairo',
'atk', 'win32com'],)})
Alguien sabe qué sucede? según sé, todo está aparentemente bien, pero no
funciona. El programa, repito, funciona si lo ejecuto con el intérprete
Python que está instalado en el sistema.
Agradezco cualquier ayuda que me pudieran dar. Leí algo en google, pero
nada hablaba del uso de SAPI con Python.
Gracias.
Más información sobre la lista de distribución Python-es