import的包要么从系统环境变量路径导入,要么自己设定相对路径
from . import *表示从当前目录道路,而from .xxx import xxx则表示从当前目录下的xxx导入xxx,
例如:在模块A.B.C中的代码:
from . import D # 导入A.B.D
from .. import E # 导入A.E
from ..F import G # 导入A.F.G,.. 和 F是连着的,中间没有空格
.代表当前目录,..代表上一层目录,...代表上上层目录。
注意使用过程中会出现的问题
一、出现 No module named '__main__.config'; '__main__' is not a package
Traceback (most recent call last):
File "E:/project/spider.py", line 9, in <module>
from .config import *
ModuleNotFoundError: No module named '__main__.config'; '__main__' is not a package
测试过程如下:
原因:
主要原因是使用相对路径不正确,使用包内引用方式时注意显式调用和隐式调用的方式。隐式调用只能用于其子包内之间的相互引用,显示引用既可以用于主模块调用包,也可用与子包内之间的相互引用。
请注意,显式和隐式相对导入都基于当前模块的名称。由于主模块的名称始终是"main",因此用作Python应用程序主模块的模块应始终使用绝对导入。
以下使用正确的方式对包进行相互引用。
(一) 子包和嵌套子包结构
(二)主模块
输出结果如下:
证明:
以上过程证明,在主模块中调用时,主模块文件默认的__name__
是__main__
使用显式调用模块不会出现问题,使用隐用模块调用会默认主模块和调用的子模块均为__main__
因此,因此会出现上述调用的问题。