python 的包的导入
已经写过一篇包的导入了,最近又遇到了点问题,所以想把这些再搞的明白点就又试了试
代码结构如下
在test目录下,有Admin包,home包,在home下有它的子包foo
各个文件代码如下
admins.py
admin = "administrator"
too.py
from Admin import admins print(admins.admin)
a.py
aa = "sss" from . import b from Admin import admins from home.foo import too # print(bb) #print(b.bb)
b.py
bb = "ccc" from . import a #print(a.aa)
c.py
from home import a #print(a.Admin.admins) print(a.b.bb) #print(a.admins.admin) print(a.too.admins.admin)
先说同包相互导入可以使用相对路径方式导入,但是这个导入后不能直接执行py文件,否则会报错找不到模块
这个例子就是home包下的a.py和b.py相互导入
在a和b里我们先定义变量再导入,否则会提示找不到变量,陷入到循环导入的错误中,同包相对路径导入是没问题的,并且不能直接执行py文件,需要在包外调用执行,就是使用c.py来调用执行
看c的代码就可以看出来,可以通过a来调用到b的变量
home里面的a.py要导入foo里面的模块的话就不能使用 相对路径的方式了,否则会报错提示以下错误
ValueError: attempted relative import beyond top-level package
这个原因是没把foo路径加到sys.path里,所以不能使用相对路径也就是..foo方式导入,必须用绝对路径了
home.foo方式导入就没问题了