Python跨目录导入类出现ModuleNotFoundError报错如何解决?
解决方法
你遇到的两个报错核心原因是:Python运行时的模块搜索路径没有包含folder2所在的上级根目录,且直接运行file1.py时该文件被识别为顶层执行脚本,无法使用相对导入。以下是2种可直接落地的解决方案:
方案1:用模块方式运行脚本(最规范,无需修改导入代码)
- 先确认你的项目根目录结构,将folder1、folder2放在同一个根目录下,示例结构:
your_project_root/ ├── folder1/ │ └── file1.py └── folder2/ ├── __init__.py └── class2.py
- 保留file1.py里的原始导入语句:
from folder2.class2 import Class2 - 不要直接进入folder1目录运行
python file1.py,而是在your_project_root目录下执行命令:python -m folder1.file1
这个方式会自动将your_project_root加入模块搜索路径,完全符合Python的模块导入规范,不会出现路径兼容问题。
方案2:临时添加搜索路径(适合需要直接运行file1.py的场景)
无需调整运行命令,直接修改file1.py的开头代码,先把根目录加入搜索路径再执行导入:
import sys from pathlib import Path # 将file1.py的上两级目录(也就是your_project_root)加入模块搜索路径 sys.path.append(str(Path(__file__).parent.parent.resolve())) # 再执行正常导入即可 from folder2.class2 import Class2
补充说明
Python 3.3+之后空的__init__.py不是识别目录为Python包的必要条件,你之前添加后仍然报错是因为没有解决模块搜索路径的问题,该文件可以保留不影响运行。
内容的提问来源于stack exchange,提问作者OneManArmy
相关产品推荐
相关产品推荐

