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
相关产品推荐
相关产品推荐

