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

  • 相关阅读:
    【CSS学习】--- 背景
    线程运行诊断
    Mysql变量、存储过程、函数、流程控制
    设计模式之外观模式(门面模式)
    Spring的JdbcTemplate使用教程
    @AspectJ注解的value属性
    自定义Yaml解析器替换Properties文件
    @Import导入自定义选择器
    Spring中Bean命名源码分析
    Java操作fastDFS
  • 原文地址:https://www.cnblogs.com/hh2737/p/9375703.html
Copyright © 2011-2022 走看看