zoukankan      html  css  js  c++  java
  • 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方式导入就没问题了

  • 相关阅读:
    Emulator PANIC: Could not open: AVD2.3.1
    VC++ 6.0 快捷键
    eclipse 中文版 变成 英文版 方法
    SharedPreferences 用法
    subString
    Android键盘属性
    【Android异常】The specified child already has a parent. You must call removeView() on the child's parent first.
    ListView的ScrollListener
    Android 自定义格式的对话框
    Android ListView 设置
  • 原文地址:https://www.cnblogs.com/hh2737/p/9375703.html
Copyright © 2011-2022 走看看