相对模块导入问题解决ImportError: attempted relative import with no known parent package

  • 问题:

1. 目录结构:
your_project/
├── main.py
└── my_package/
    ├── __init__.py         # 包定义文件
    ├── module_a.py
    └── sub_package/
        ├── __init__.py
        └── module_b.py
2. module_a.py中:
from . import aaa

your_project/目录下运行

python my_package/module_a.py
3. 报错:

ImportError: attempted relative import with no known parent package

4. 原因:

当直接运行 python my_package/module_a.py时,Python 会将 module_a.py视为独立脚本,而不是包的一部分,导致无法识别 my_package为包。

5. 解决办法:

方案 1:改为绝对导入

# module_a.py中
from my_package import aaa

# 在 your_project/ 目录下执行
python my_package/module_a.py

方案 2:以模块方式运行(保留相对导入)

# 在 your_project/ 目录下执行
python -m my_package.module_a

要求:my_package 必须是包(有 __init__.py)

  • 补充:同级目录相对导入 

your_project/
├── main.py
└── my_package/
    ├── __init__.py         # 包定义文件
    ├── module_a.py
    └── sub_package/
        ├── __init__.py
        └── module_b.py
1. 如果代码写在 module_a.py 中:
from . import aaa  # "." 代表 my_package 目录

aaa 需要是 my_package 包内的模块或变量。

要求 my_package/__init__.py 中存在aaa的定义或导入。

2.如果代码写在 module_b.py 中:
from . import aaa  # "." 代表 sub_package 目录

aaa需要是 sub_package 包内的内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值