同目录自定义Word类导入失败求助(Vosk语音识别场景)
问题描述
目录结构如下:
main/ ├─ folder1/ │ ├─ __init__.py │ ├─ script1.py │ ├─ Word.py ├─ folder2/ │ ├─ __init__.py │ ├─ script2.py ├─ __init__.py ├─ main.py ├─ __init__.py
在script1.py中尝试调用同目录的Word.py自定义类,关键代码片段如下:
import wave import json from vosk import Model, KaldiRecognizer, SetLogLevel **from .Word import Word as custom_Word** # ... 中间VOSK识别逻辑省略 ... # 实例化自定义类部分 for obj in sentence['result']: w = **custom_Word(obj)** # 创建自定义Word对象 list_of_Words.append(w) # ... 后续输出逻辑省略 ...
自定义Word.py代码:
class Word: # 对应VOSK语音识别API JSON格式的单词类 def __init__(self, dict): ''' 参数: dict (dict): JSON解析后的字典,包含: conf (float): 置信度,0到1之间 end (float): 单词发音结束时间(秒) start (float): 单词发音开始时间(秒) word (str): 识别出的单词 ''' self.conf = dict["conf"] self.end = dict["end"] self.start = dict["start"] self.word = dict["word"] def to_string(self): ''' 返回该实例的字符串描述 ''' return "{:.2f} - {:.2f}\n{:20}".format( self.start, self.end, self.word)
运行时出现错误:no module named 'Word' found,已将实例化代码修改为custom_Word(obj),但问题仍未解决。
解决方案
方法1:以包的形式运行脚本
相对导入(from .Word import...)仅在脚本作为Python包的一部分被导入或运行时生效,直接运行script1.py会触发模块找不到的错误。
- 从
main目录的上级目录执行:python -m main.folder1.script1 - 或者通过
main.py间接调用:
在main.py中添加代码:
然后运行from folder1.script1 import 你的核心函数名 你的核心函数名()main.py即可。
方法2:改用绝对导入并添加路径
如果需要直接运行script1.py,可以将main目录添加到Python路径后使用绝对导入:
import sys import os # 将main目录添加到Python搜索路径 sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from folder1.Word import Word as custom_Word
方法3:直接导入同目录模块
直接导入同目录的Word模块,无需相对路径:
from Word import Word as custom_Word
注意:这种方式要求运行脚本时,当前工作目录是folder1,执行命令如下:
cd main/folder1 python script1.py
内容的提问来源于stack exchange,提问作者kanjas
相关产品推荐
相关产品推荐

