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

Python模块化项目如何正确跨包导入基类解决导入报错

Python模块化项目跨包导入问题

项目基础结构

开发类库组件时采用模块化架构设计,项目根目录包含入口文件main.py,以及两个核心业务包package1、package2,每个包内的业务实现类均继承自对应包内定义的基类,完整目录结构如下:

.
├── main.py
├── package1
│   ├── base_package1.py
│   ├── __init__.py
│   └── main_package1.py
└── package2
    ├── base_package2.py
    ├── __init__.py
    └── main_package2.py

每个包的代码文件中都内置了独立测试逻辑,其中测试package2时需要依赖package1的能力。当前main.py为空文件,其余各文件代码如下:

package1 文件代码

  • package1/__init__.py
from .main_package1 import *
  • package1/base_package1.py
class BasePackage1:
    def __init__(self):
        print("init base package 1")
  • package1/main_package1.py
from base_package1 import BasePackage1

class MainPackage1(BasePackage1):
    def __init__(self):
        super().__init__()
        print("init main package 1")

if __name__ == "__main__":
    # 测试MainPackage1逻辑
    pkg = MainPackage1()

package2 文件代码

  • package2/base_package2.py
class BasePackage2:
    def __init__(self):
        print("init base package 2")
  • package2/main_package2.py
from base_package2 import BasePackage2

class MainPackage2(BasePackage2):
    def __init__(self):
        super().__init__()
        print("init main package 2")

if __name__ == "__main__":
    # 方案1:手动追加根目录到系统路径
    import sys
    sys.path.append("../")
    from package1 import MainPackage1
    # 报错信息:ModuleNotFoundError: No module named 'base_package1'

    # 方案2:使用相对导入
    from ..package1 import MainPackage1
    # 报错信息:ImportError: attempted relative import with no known parent package

遇到的问题

两种导入方案均运行失败:

  • 方案1通过sys.path追加上级目录后导入package1,触发找不到base_package1模块的错误
  • 方案2直接使用相对导入语法,触发无已知父包的相对导入错误
    需要明确该场景下的标准导入实现方案。

更新:目前已找到一个临时可行的方案并发布为回答,若有更优解决方案欢迎提交分享。


内容的提问来源于stack exchange,提问作者Gautam Sreekumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 02:48:37