package_0
├── module_0.py
├── module_1.py
├── package_1
│ ├── __init__.py
│ ├── module_2.py
│ ├── module_3.py
│ └── package_2
│ ├── __init__.py
│ ├── module_21.py
│ └── module_22.py
└── package_3
├── __init__.py
└── module_4.py
在 module_2 中导入 module_4:from …package_3 import module_4
会报错:
ValueError: attempted relative import beyond top-level package
由于在“顶层模块”之外引用包,这里用到“顶层模块”的概念
“顶层模块”是这执行文件同级的文件,如:
如果将 module_0.py 当作执行模块,则和该模块同级的 package_1 和 package_3 就是顶级包(top-level package),而 module_2 在package_1中,module_0、module_1和module_4都在 package_1之外,所以调用这三个模块时,就会报这个错误。
学习来自:https://zhuanlan.zhihu.com/p/69099185