必备知识:from . import,“.” 代表使用相对路径导入,即从当前项目中寻找需要导入的包或函数
一、问题描述:
工作项目内的__init__文件初始化一个函数func,同一工作目录的 ccc模块 调用该函数,可以用:
(1)from file03 import func
(2)from . import func
然后执行func(),让ccc执行时,打印‘----’
但是使用 第(2)种方法调用func后,当ccc被执行时报错如下:
from . import func
SystemError: Parent module '' not loaded, cannot perform relative import
(提示父模块没有加载,无法展示导入关系)
而使用第(1)种导入方法
导入时不存在这样的报错
二、下面用项目外的py文件导包使func执行:
现在我在工作目录下新建一个py文件test(test与file03平级),使用test调用ccc,让函数func打印内容:
此时若在ccc使用方法(2)导入函数,test执行不会发生报错
可以正常打印
三、拓展:
在file03 下新建py文件,使用 from . import ccc,该文件被执行时,也会报同样的错误,而用from file03 import ccc不会报错,说明使用 . 导包和使用 . 导函数一样也不能正常执行
四、结论:
py文件若含有from . import 导包或导入函数的情况,无法在该文件下正常执行,而父模块被外部加载时可以正常被使用。