修复CosyVoice中的NameError: name ‘ZhNormalizer‘ is not defined和ImportError: cannot import name ‘EnN报错的记录
报错摘录1:报错摘录2:在尝试在Windows部署并运行CosyVoice原因:代码试图从模块导入一个名为的类,但实际上该模块中定义的是Normalizer类。原因:与第一个问题相似,代码试图从模块导入一个名为的类,但实际存在的类名为Normalizer。这两个问题的根本原因是使用的库中定义的类名与代码中预期的类名不匹配。
#工作记录
问题总结
报错摘录1:
Traceback (most recent call last):
File "F:\PythonProjects\CosyVoice\webui.py", line 188, in <module>
cosyvoice = CosyVoice(args.model_dir)
File "F:\PythonProjects\CosyVoice\cosyvoice\cli\cosyvoice.py", line 41, in __init__
self.frontend = CosyVoiceFrontEnd(configs['get_tokenizer'],
File "F:\PythonProjects\CosyVoice\cosyvoice\cli\frontend.py", line 71, in __init__
self.zh_tn_model = ZhNormalizer(remove_erhua=False, full_to_half=False, overwrite_cache=True)
NameError: name 'ZhNormalizer' is not defined
报错摘录2:
Traceback (most recent call last):
File "F:\PythonProjects\CosyVoice\webui.py", line 25, in <module>
from cosyvoice.cli.cosyvoice import CosyVoice, CosyVoice2
File "F:\PythonProjects\CosyVoice\cosyvoice\cli\cosyvoice.py", line 21, in <module>
from cosyvoice.cli.frontend import CosyVoiceFrontEnd
File "F:\PythonProjects\CosyVoice\cosyvoice\cli\frontend.py", line 16, in <module>
from tn.english.normalizer import EnNormalizer
ImportError: cannot import name 'EnNormalizer' from 'tn.english.normalizer' (D:\ProgramData\anaconda3\envs\cosyvoice310\lib\site-packages\tn\english\normalizer.py)
在尝试在Windows部署并运行 CosyVoice 开源项目时,遇到了以下两个主要错误:
NameError: name 'ZhNormalizer' is not defined- 原因:代码试图从
tn.chinese.normalizer模块导入一个名为ZhNormalizer的类,但实际上该模块中定义的是Normalizer类。
- 原因:代码试图从
ImportError: cannot import name 'EnNormalizer' from 'tn.english.normalizer'- 原因:与第一个问题相似,代码试图从
tn.english.normalizer模块导入一个名为EnNormalizer的类,但实际存在的类名为Normalizer。
- 原因:与第一个问题相似,代码试图从
这两个问题的根本原因是使用的库 WeTextProcessing 中定义的类名与代码中预期的类名不匹配。
解决方案
对于 ZhNormalizer 错误:
- 将原始导入语句:
修改为:from tn.chinese.normalizer import ZhNormalizerfrom tn.chinese.normalizer import Normalizer as ZhNormalizer
对于 EnNormalizer 错误:
- 将原始导入语句:
修改为:from tn.english.normalizer import EnNormalizerfrom tn.english.normalizer import Normalizer as EnNormalizer
通过上述修改,我们实际上是将 Normalizer 类重命名为代码中所需的 ZhNormalizer 和 EnNormalizer,从而解决了命名冲突的问题。

验证步骤
为了确保更改有效,可以通过以下命令进行验证:
python -c "from tn.chinese.normalizer import Normalizer as ZhNormalizer; print(ZhNormalizer)"
python -c "from tn.english.normalizer import Normalizer as EnNormalizer; print(EnNormalizer)"
如果输出显示了正确的类信息(例如 <class 'tn.chinese.normalizer.Normalizer'>),则说明导入成功,可以继续运行项目。
最终结果
经过以上调整,我们的 CosyVoice 项目应该能够正常启动并运行。希望这次的经验能为你提供有价值的参考。
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)