python导包

  1. 模块
    一个 .py文件就是一个模块


  2. 一个包下必须有__init__.py文件(python2必须有,python3可以没有),此文件标志着当前文件夹是一个包(package)。
    此文件也是一个模块,其模块名字就是顶层包到当前目录的点路径。
    比如,A/B/C,A为顶层包,B为中层包,C为底层包,此时C包中的__init__.py模块的名字为A.B.C而并不是其自身的__init__。

  3. 模块作为入口文件和包时的名称不一样
    模块作为入口文件的时候,其模块名字会被指定为__main__;当模块作为被导入的部分的时候,模块名字就是.py文件不带后缀的名字。这也就是为什么在模块中写if条件语句判断__name__是否等于__main__,条件成立的情况下才进行脚本的执行。否则,如果另一个模块中也有可执行语句,那么导入整个模块之后,被导入模块的脚本也会执行,破坏程序。

  4. 两种导模块的方法
    规则的,入口模块应该在最顶层,而后导入其他包,或者其他包中的函数。
    当需要导入的模块的路径难找时,可以先导入sys模块,而后使用sys.path.add(“xxx”)(xxx可以是绝对路径,相对路径),此作用是把xxx路径临时添加到搜索路径。之后就可以正常地导入该路径下模块了。

  5. 导入的方法
    xxx为包,yyy是此包中的模块
    直接导入整个模块:
    import xxx.yyy
    导入模块中具体函数:
    import xxx.yyy.func
    从一个包中导入一个模块:
    from xxx import yyy
    从一个模块中导入一个函数:
    from xxx.yyy import func

  6. .py文件的__name__属性和__package__属性
    若一个.py文件被当作入口文件执行,此时文件的__name__属性为__main__而__package__属性为None。但是使用路径导入模块的时候,python需要借助当前文件的__name__和__package__属性来寻找包路径,所以当一个.py被当作入口文件的时候,是无法借助相对路径或者绝对路径来寻找包路径的。
    因此,需要将入口文件放在工程的顶级目录。
    作为模块被导入的时候,此模块中的脚本不会执行。

  7. 包中包模块导入
    大包中包含很多小包,小包中的模块有引用关系。
    一个模块引用另一个模块,要用from xxx import xxx格式。
    即使再同一个包中的模块,也不能用import直接导入,因为import只会搜索系统路径中的包的位置。
    from xxx import xxx中,from后的路径需要从最大的包开始。
    比如
    A/B/C/demo.py

    A/B/C/tools.py
    A/B/test.py
    A/B/C/D/last.py

    demo.py导入其他三个模块的时候
    可以如下两种方式

    方式一:绝对路径

    import A.B.C.tools
    import A.B.test
    import A.B.C.D.last
    或者
    from A.B.C import tools
    from A.B import test
    from A.B.C.D import last
    

    方式二:相对路径

    #相对路径只能使用form xxx import xxx语句
    from . import tools
    from ..B import test
    from .D import test
    

    两个例外:
    在包中不能导入顶层目录中的模块。
    在工程顶层,和入口文件同级的模块可以被import直接导入入口文件。

  8. 如何导入__init__模块?
    直接导入对应的包名就可以。
    如:
    A/B/C/init.py
    此时想导入C下的__init__模块,只需要:
    import A.B.C
    或者
    from A.B import C
    就可以了

    但是对于模块自己所在的包,如果这个包在顶层,则无法使用from xxx import xxx语句导入。
    只能使用import xxx直接导入。
    如:
    A/demo.py
    A/init.py
    在demo.py中只能这样书写:

    import A
    

    而不能这样写

    from . import A
    或者
    from A import A
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值