You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python同级相对导入报错:‘no known parent package’问题排查

解决Python相对导入"no known parent package"错误

问题复现

项目结构

project/
├── __init__.py
├── bar.py
├── foo.py
└── main.py

代码内容

  • bar.py:
    from .foo import Foo
    
    class Bar:
        def __init__(self):
            print("Bar initialized with", Foo())
    
  • foo.py:
    class Foo:
        def __init__(self):
            print("Foo initialized")
    
  • main.py:
    from bar import Bar
    
    if __name__ == "__main__":
        Bar()
    

报错情况

在project目录下执行python main.py,抛出错误:

ImportError: attempted relative import with no known parent package

原因分析

直接运行python main.py时,Python会将main.py所在的project/目录加入sys.path,并把main.py当作顶层脚本执行——此时Python不会把project识别为一个包,因此bar.py中的相对导入from .foo import Foo找不到对应的父包上下文。

彻底修复方案

不需要修改代码或调整sys.path/PYTHONPATH,只需通过Python的-m参数以模块方式运行main.py:

  1. 切换到project目录的父目录(比如project路径是~/mycode/project,就执行cd ~/mycode)
  2. 执行命令:
    python -m project.main
    

原理说明

使用-m参数时,Python会将当前目录(project的父目录)加入sys.path,并把project当作一个包来加载。此时bar.py作为project包的一部分,相对导入就能正常识别父包上下文,顺利导入foo.py中的内容。

内容的提问来源于stack exchange,提问作者Umberto Fontanazza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 14:18:15