会说话的代码 Python pyttsx3,及AttributeError:partially initialized module......(......)报错,解决方法

部署运行你感兴趣的模型镜像

安装pyttsx3

我们先安装需要的库pyttsx3文字朗读模块:

常用方法是在输入命令:pip install 所需的模块 -i http://pypi.doubanio.com/simple/ --trusted-host pypi.doubanio.com (使用国内的镜像网站) 

输入命令:pip install pyttsx3 -i http://pypi.doubanio.com/simple/ --trusted-host pypi.doubanio.com   

输入命令(pip list)显示已安装的第三方模块,查看是否安装成功

若未安装成功,也可使用https://pypi.python.org网站包含的安装包,输入命令pip --trusted-host pypi.python.org install 安装包名字(pip --trusted-host pypi.python.org install pyttsx3)

使用VsCode编辑器,敲出一个简单的示例:

然而我在运行时发生了报错,无法运行出现:AttributeError: partially initialized module 'pyttsx3' has no attribute 'init' (most likely due to a circular import),我们去谷歌翻译了一下(英语不好,狗头保命!)

 翻译后:AttributeError:部分初始化的模块'pyttsx3'没有属性'init'(很可能是由于循环导入)  

 
抓住翻译过来的意思,(很可能是由于循环导入)。撇了一眼文件的命名,就突然灵光一闪,咦!

我的命名是pyttsx3,而这就是我要对应使用的模块,难不成是模块名称重复造成。说干就干,马上修改文件的命名,不出所料的成功运行了。

具体为什么不能使用模块名进行文件命名,于是我百度了一下嘿嘿:

由此可见我们在命名是不应该使用模块名进行文件命名,否则python在查找模块时出现错误,只有将文件名pygame修改成任意非相同的名称即可解决。

既然我们是要让代码开口说话,那pyttsx3模块就不仅仅是只是只有普通一个朗读那么简单,我们可以进行语速控制、音量控制、更换发音人声音,以及可以将文本输出音频。

(一)语速控制:

rate = engine.getProperty('rate') #获取当前音频语速,范围一般为0-200,默认值为200
engine.setProperty('rate', 200)  #改变语速

(二)音量控制:

volume = engine.getProperty('volume')  #设置音量                       
engine.setProperty('volume',0.6)  #范围一般为0.0~1.0 默认值为1.0

(一 + 二)语速音量同时控制:

import pyttsx3 #导包,调用pyttsx3模块 
engine = pyttsx3.init() #初始化一个朗读引擎


engine.setProperty('volume', 0.5) #设置音量  范围为0.0-1.0  默认值为1.0
rate = engine.getProperty('rate') #获取当前音频语速,范围为0-200 默认值为200
engine.setProperty('rate', rate+100) #改变语速 

engine.say("六十六岁刘老六,修了六十六座走马楼,楼上摆了六十六瓶苏合油。") #播放
engine.runAndWait() #运行并且等到播放完毕,没有本语句是没有声音的


engine.setProperty('volume', 0.9) #设置音量  范围为0.0-1.0  默认值为1.0
engine.setProperty('rate', rate) #默认语速为200
engine.say("六十六岁刘老六,修了六十六座走马楼,楼上摆了六十六瓶苏合油。") #模块阅读,中英文都可

engine.runAndWait() #运行并且等到播放完毕,没有本语句是没有声音的

print(rate)

(三)更换发音人声音:

系统内部声音,设置男性声音(voices[0].id)、设置女性声音(voices[1].id)

voices = engine.getProperty('voices')  
engine.setProperty('voice', voices[0].id) #设置当前声音为“男性”,当前声音可读中文也可读英文
engine.setProperty('voice', voices[1].id) #设置当前声音为“女性”,当前声音不可读中文

eg:

voices = engine.getProperty('voices')
for vice in voices:
  engine.setProperty('voice', voices[0].id)
  engine.say('Hello World. Hello Python,byebye!')
  engine.say('阿巴阿巴阿巴阿巴阿巴阿巴阿巴!')
engine.runAndWait()

(四)保存到..文件:

import pyttsx3
engine = pyttsx3.init()
engine.save_to_file("你好",'D:/xxx.mp3')  #朗读音频保存为MP3文件
engine.runAndWait()

您可能感兴趣的与本文相关的镜像

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

在使用 `matplotlib.pyplot` 时,如果遇到 `AttributeError: partially initialized module 'matplotlib.pyplot' has no attribute 'switch_backend'` 异常,通常表明模块在导入过程中出现了问题,尤其是由于 **循环导入(circular import)** 或 **命名冲突** 导致的模块未完全初始化。 ### 异常原因分析 1. **循环导入** 是最常见的原因。当一个模块在导入另一个模块时,另一个模块又尝试导入第一个模块,就会导致循环依赖。这种情况下,Python 无法完成模块的完整初始化,从而导致模块属性缺失的问题 [^3]。 2. **命名冲突**:如果当前目录中存在与标准库或第三方库同名的 Python 文件(例如 `matplotlib.py` 或 `numpy.py`),Python 会优先导入本地文件,而不是系统安装的模块。这会导致导入的模块不完整,进而引发 `AttributeError` [^2]。 3. **缓存问题**:在某些情况下,Python 的 `__pycache__` 目录中可能残留了旧版本的模块编译文件,也可能导致模块初始化失败。 ### 解决方案 1. **检查文件名冲突**: 确保当前工作目录中没有与 `matplotlib` 或其子模块同名的 `.py` 文件。例如,文件名 `matplotlib.py` 或 `pyplot.py` 会与官方模块冲突,导致导入错误。请将这些文件重命名或删除 [^2]。 2. **清除缓存**: 删除项目目录中的 `__pycache__` 文件夹以及 `.pyc` 编译文件,强制 Python 重新加载模块。可以使用以下命令: ```bash find . -name "__pycache__" -exec rm -r {} + find . -name "*.pyc" -delete ``` 3. **重新安装 matplotlib**: 如果问题依然存在,可能是 `matplotlib` 安装损坏。可以通过以下命令卸载并重新安装: ```bash pip uninstall matplotlib pip install matplotlib ``` 4. **避免循环导入**: 检查代码结构,确保没有在 `matplotlib.pyplot` 导入期间触发对当前模块的反向导入。可以将导入语句移至函数内部或模块末尾,以避免循环依赖 [^3]。 5. **使用虚拟环境**: 创建一个干净的虚拟环境,确保没有第三方库之间的冲突。例如: ```bash python -m venv venv source venv/bin/activate # Linux/macOS venv\Scripts\activate # Windows pip install matplotlib ``` 6. **检查后端设置**: 如果代码中调用了 `matplotlib.pyplot.switch_backend()`,请确保在调用此函数之前没有其他绘图操作,并且后端名称正确。例如: ```python import matplotlib.pyplot as plt plt.switch_backend('TkAgg') ``` ### 示例代码 以下是一个使用 `switch_backend` 的完整示例: ```python import matplotlib import matplotlib.pyplot as plt # 切换后端 matplotlib.use('TkAgg') # 或者 'Agg'、'PDF' 等 plt.switch_backend('TkAgg') # 绘制简单图形 plt.plot([1, 2, 3], [4, 5, 1]) plt.title("Test Plot") plt.show() ``` ###
评论 10
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值