-
问题:
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 包内的内容。