天天看点

Python中包、模块导入解释

1、简单情形

Python中的包、模块导入主要有两种方式:

() import package.module
() from  package import module
           

将模块导入当前程序之后,模块module中对应的属性attr使用方式分别是:

() package.module.attr
() module.attr
           

由此可以总结模块中的成员引用规律:

  • import导入的包,使用包中具体成员时要使用‘绝对路径’ ,从顶级包名开始写成员引用路径;
  • from—import导入的包,使用包中具体成员时使用‘相对路径’,从from—import 结构中的import之后的模块开始写成员引用路径;

2、复杂情形

当包中包含子包时,并考虑到

__init__.py

文件作用时,包、模块的导入及成员的使用较为复杂,容易造成混淆,例如,Python编程时有如下包结构:

pkg/
__init__.py
      subPkg_a/
       __init__.py
       mod_a.py
       mod_a1.py
       mod_a2.py
       subPkg_b/
        __init__.py
       mod_b.py
           

__init__.py

文件解释:

  • 每个包下都有

    __init__.py

    文件,这是个包初始化模块,导入包时实质上是导入该文件中所定义的模块,也可以在该文件中做一些初始化工作,也可以是空文件。

根据上述包结构,若在

mod_b.py

中要使用mod_a、mod_a1中的函数(注意各种导入方式中,函数的引用方式是不同的),有以下几种方法:

  • mod_b.py

    文件中写

    import pkg.subPkg_a.mod_a

    import pkg.subPkg_a.mod_a1

    或者

    from pkg.subPkg_a import mod_a

    from pkg.subPkg_a import mod_a1

  • 在subPkg_a对应的

    __init__.py

    文件中写

    import pkg.subPkg_a.mod_a

    import pkg.subPkg_a.mod_a1

    ,那么在mod_b.py文件中导入时就可以使用

    import pkg.subPkg_a

    或者

    from pkg.subPkg_a import *

    方式导入mod_a及mod_b了,如下图所示.
Python中包、模块导入解释

当一个包中包含多个模块时,在

__init__.py

中还可以使用

__all__

变量存储一个导入模块列表,表达更为简洁,如下图所示。

注意:因为

__all__

变量列表中没有包含

mod_a2

,此时在

mod_b

中不能使用

mod_a2

中的成员。

Python中包、模块导入解释