Python项目同目录导入报错:No module named 'config'
解决Python包内模块导入错误:ModuleNotFoundError: No module named 'config'
问题分析
你的项目结构中,voice.py属于modules包,但运行main.py时,Python的模块搜索路径以lunarcity目录为起点。如果voice.py中用import config,Python会在lunarcity根目录找config.py而非modules目录,导致找不到模块;相对导入from . import config本身是正确的,但需确保voice.py是作为modules包的一部分被导入,而非单独运行。
解决方案
1. 修正voice.py中的导入语句
选择以下两种正确的导入方式之一:
方式一:相对导入(推荐,保持包内独立性)
# voice.py from . import config from . import manager # 调用模块内的函数/变量示例 def handle_voice_message(): print(config.VOICE_SETTINGS) manager.process_voice_data()
方式二:绝对导入(明确指定包路径)
# voice.py from modules import config from modules import manager # 同样可以调用对应模块内容
2. 修正main.py中的导入语句
确保从modules包中正确导入voice模块或其函数:
# main.py # 导入整个voice模块 from modules import voice # 或者直接导入需要的函数 from modules.voice import handle_voice_message def main(): # 使用导入的函数 handle_voice_message() if __name__ == "__main__": main()
3. 正确的运行方式
必须以main.py为入口运行项目,且运行路径要正确:
- 进入
lunarcity目录,执行:python main.py - 或者在
lunarcity的父目录,执行:python lunarcity/main.py
注意:不要直接运行voice.py(比如python modules/voice.py),否则voice.py会被当作顶层脚本,相对导入会触发ValueError: attempted relative import in non-package错误。
额外排查点
- 确认
modules/__init__.py存在即可,内容为空不影响包的识别; - 再次检查所有文件名和导入语句的拼写(包括大小写,Windows系统不区分,但Linux/macOS区分)。
内容的提问来源于stack exchange,提问作者hikaru-k-bit
相关产品推荐
相关产品推荐

