【一分钟解决】Python报错ImportError: attempted relative import with no known parent package
日期: 2021-02-24 分类: 个人收藏 574次阅读
ImportError: attempted relative import with no known parent package
关键词
- 相对导入(relative import)
- 包(package)
解决方案
明确自己到底在作甚?
- 是否真的需要相对导入?相对导入使用于包内部,包文件需要通过被其它脚本导入使用,不能单独执行!)
- 当前执行错误的文件是
包
的一个模块吗?如果不是,那么你当前所执行的文件属于普通脚本,应该选择绝对导入借用其它包(目录)或模块(.py
文件)的内容;
- 当前执行错误的文件是
- 检查包是否有效
参考链接
Stack Overflow: Relative imports for the billionth time
python3-cookbook: 10.9 将文件夹加入到sys.path
扩展 - 概念明晰
- 脚本(script):通过执行该文件能够完成某项任务,其中存在必要的任务执行逻辑(一般通过
if __name__ == '__main__:'
代码块明确任务的整体执行逻辑); - 模块(module):以
.py
作为文件名扩展的单个Python
文件,一般由定义不同常量、函数、类而组成,其内容为方便其它模块、脚本进行调用,不存在自身的运行逻辑(也即通过在其它文件中使用import
语句进行调用,而非直接通过python *.py
运行); - 包(package):如果一个目录中存在多个模块,可以通过创建
__init__.py
文件将该当前目录标识为一个包。若多个模块放置于具有多层嵌套的目录当中,其逻辑关系为包(根目录)-> 子包(子目录)-> 模块(*.py)
; - 绝对导入(absolute import):从包/模块外部,按照目标模块的存在路径从外到内进行导入。示例
- 单独的模块:
import module
- 模块位于包内部(不存在子包):
from package import module
- 模块位于包内部(存在子包):
from package.subpackage import module
)
- 单独的模块:
- 相对导入(relative import):位于同一包中的不同子包和模块,可以通过前缀
.
标识存在调用关系的包/模块之间的路径依赖关系并进行相对调用。示例:- 同层目录的模块:
from . import module
- 模块位于同层包内部(不存在子包):
from .package import module
- 模块位于同层包内部(存在子包):
from .packge.subpackge import module
- 模块位于上一层级目录:将以上语句的前缀进行替换
from . -> from ..
,以此类推
- 同层目录的模块:
除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog
标签:python
精华推荐