云上的天涯

导航

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方式导入就没问题了

posted on 2018-07-27 09:33  云上的天涯  阅读(153)  评论(0编辑  收藏  举报