Python从嵌套子模块导入类报错:ModuleNotFoundError与ImportError
解决Python模块导入错误的方案
原因分析
- 使用
from B.C.property import Property报错:Python的模块搜索路径(sys.path)未包含B所在的根目录,导致无法识别B模块。 - 使用
from ..B.C.property import Property报错:直接运行main.py时,它被当作顶级脚本文件,不属于任何Python包结构,因此相对导入的..无法识别父包。
解决方案
方案1:手动添加项目根目录到Python路径
在main.py开头加入以下代码,将B所在的根目录加入模块搜索路径:
import sys import os # 获取当前文件所在目录的父目录(即项目根目录) root_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.append(root_dir) # 现在可正常导入 from B.C.property import Property
方案2:以包形式运行脚本(推荐)
- 在项目根目录、
A、B、C目录下分别创建空的__init__.py文件(Python 3.3+可省略,但添加后兼容性更强),标识这些目录为Python包。 - 从项目根目录执行以下命令,以模块方式运行
main.py:
python -m A.main
- 此时
main.py属于包结构的一部分,可正常使用相对导入:
from ..B.C.property import Property
方案3:确保根目录在Python环境路径中
如果项目根目录已被添加到系统的PYTHONPATH环境变量中,直接使用绝对导入即可:
from B.C.property import Property
内容的提问来源于stack exchange,提问作者Tah
相关产品推荐
相关产品推荐

