Python从子目录导入模块报ModuleNotFoundError错误求助
Python跨目录导入模块报错解决方案
报错原因说明
import Rocket:Python默认的模块搜索路径不包含Classes子目录,无法直接检索到该模块import .Rocket:相对导入语法仅支持包内部的模块调用,main.py是项目入口脚本,不属于任意子包的内部模块,无法使用相对导入import Classes.Rocket:该语法本身合法,报错通常是因为运行脚本时的工作目录不是vision项目根目录,导致Python无法定位到Classes包
可行解决方案
方案1(最推荐,无侵入修改)
- 在
main.py中使用如下导入语句:
# 直接导入Rocket.py中的rocket类 from Classes.Rocket import rocket # 如需导入整个Rocket模块则用:import Classes.Rocket
- 运行脚本时必须先切换到
vision根目录,再执行启动命令:
python main.py
方案2(适配特殊运行场景)
如果你的运行环境无法固定在vision目录下启动脚本,可以在main.py最开头先将项目根目录加入Python模块搜索路径:
import sys import os # 将当前main.py所在的目录(即vision根目录)加入搜索路径 sys.path.append(os.path.dirname(os.path.abspath(__file__))) # 之后正常导入即可 from Classes.Rocket import rocket
方案3(规范包结构场景)
如果项目后续需要打包发布,可以在vision根目录下也新增一个空的__init__.py文件,将整个vision目录标记为Python包,之后在vision的上级目录使用包启动命令运行:
python -m vision.main
内容的提问来源于stack exchange,提问作者Muhammed Samedzade
相关产品推荐
相关产品推荐

