import pyttsx在python 2.7中工作,但不在python3中

时间:2014-07-25 20:03:43

标签: python python-3.x raspberry-pi

问题:为什么导入pyttsx时python3无法找到引擎模块?

详情

我在Raspbian Wheezy的树莓派上做这个。

在python 2.7下,以下工作:

>>> import pyttsx

在python3下,会发生以下情况:

>>> import pyttsx
Traceback (etc...)
 File "<stdin>", line 1, in <module>
 File "/usr/local/lib/python3.2/dist-packages/pyttsx-1.1-py3.2.egg/pyttsx/__init__.py", line 18, in <module>
ImportError: No module named engine

我已经安装并使用了sudo pip install pyttsx

我已导入sys

sys.path包含这个......

>>> print (sys.path) 
['','/usr/local/lib/python3.2/dist-packages/setuptools-5.4.1-py3.2.egg', '/usr/local/lib/python3.2/dist-packages/pyttsx-1.1-py3.2.egg', '/usr/lib/python3.2','usr/lib/python3.2/plat-linux2', '/usr/lib/python3.2/lib-dynload','/usr/local/lib/python3.2/dist-packages','/usr/lib/python3/dist-packages']

ls /usr/local/lib/python3.2/dist-packages导致......

easy-install.pth pyttsx-1.1-py3.2.egg setuptools-5.4.1-py3.2.egg setuptools.pth

unzip -t /usr/local/lib/python3.2/dist-packages/pyttsx-1.1-py3.2.egg show ....

pyttsx/__init__.py  OK
pyttsx/voice.py   OK
pyttsx/engine.py  OK
(etc...)
No errors detected in compressed data of pyttsx-1.1-py3.2.egg

感谢您的帮助!

4 个答案:

答案 0 :(得分:8)

我试图在Python 3.4上安装pyttsx(在Windows上)。这是我发现的:

pyttsx found on PyPiPeter Parente on GitHub开发。

Parente放弃了进一步的开发,从未将其移植到Python 3.我甚至无法在Python 3上安装他的版本。我不确定你是如何管理它的。

一个名为James Percent forked it的用户,并尝试使其与Python 3兼容。

我发现这种尝试还远远不够,因为 - 虽然我可以成功安装它,甚至成功import pyttsx,但当我尝试调用pyttsx.init()时,它会动态导入驱动程序,并导致导入错误。

我做了一个further fork to fix that,我将提交给James Percent。有了这些变化,我就可以运行@Khanrad的测试脚本。

答案 1 :(得分:4)

我相信您正在寻找图书馆:

pyttsx3

这个兼容python3的版本现在打包在pypi中,对python2和python3都很有效,据我测试,它没有给出任何错误。

只需使用:

pip install pyttsx3

用法:

import pyttsx3
engine = pyttsx3.init()
engine.say("I am talking now ");
engine.setProperty('rate',100)  
engine.runAndWait();

答案 2 :(得分:0)

在python 3中尝试此操作:

pip install pyttsx3

如果出现类似“找不到引擎”的错误,请尝试安装它。

pip install python-engineio

答案 3 :(得分:-3)

我不确定你要做什么......

在python 3中,你必须调用引擎:

engine = pyttsx.init()
engine.say("What you want to say")
engine.runAndWait()