模块包

    • 包导入是将计算机上的目录变成另一个Python命名空间,它的属性对应于目录中包含的子目录和模块文件
    • 包导入的语法:

      • Python首次导入某个目录时,会自动执行该目录下__init__.py文件的所有程序代码
      • import dir1.dir2.modname包导入后,每个目录名都成为模块对象
        (模块对象的命名空间由该目录下的__init__.py中所有的全局变量定义
        (包含显式定义和隐式定义)决定)
      • __init__.py中的全局变量称为对应目录包的属性

      __init__.py

    2.任何已导入的目录包也可以用重新加载,来强制该目录包重新加载

    3.包与import使用时输入字数较长,每次使用时需要输入完整包路径。可以用from语句来避免
    import包与from包区别

    1. from .modname1 import name #modname1与本模块在同一包中(即与本文件在同一目录下)
    2. from .. import modname2 #modname2在本模块的父目录中(即在本文件上层)

    Python2中,import modname会优先在本模块所在目录下加载modname以执行相对导入。
    因此局部的模块可能会因此屏蔽sys.path上的另一个模块
    要想启用相对导入功能,使用from __future__ import absolute_import

    • Python3中,没有点号的导入均为绝对导入。总是优先在包外查找模块