包模块管理

在文件夹下创建一个 __init__.py 的文件,可以将文件夹标识为包

导入包

import a1
print(a1.aaa)

导入模块中的部分变量、导入包中的部分模块

from a1 import aaa
print(aaa)

定义导出的变量

# 定义哪些变量可以被 * 加载
__all__ = ['aaa', 'bbb']
aaa = 2
bbb = 5
ccc = 8
from a1 import * # 此时只能导出 aaa 和 bbb
# or
from a1 import aaa, bbb
# or
from a1 import (aaa, bbb)

模块内置变量

  • dir() 当前模块所有变量的序列,dir 可以传入 import 的模块名,dir(sys)

  • __name__ 模块文件中值为模块名,例如 package2.package4.p3入口文件中值为 __main__

  • __package__ 模块文件中值为包名,入口文件中值为 None

  • __doc__ 模块头部的 ''' 注释内容,如果没有注释,值为 None

  • __file__ 物理磁盘路径

入口文件指 python3 xxx.py python 执行文件,与被导入的模块内置变量不同

__name__

if __name == '__main__':
  print('This is app')
else
  print('this is module')

相对路径和绝对路径

绝对路径

绝对路径导入使用 import ,以顶级包开头

import package2.package4.p2

相对路径

相对路径使用 from 来导入,以 . .. ... 来访问路径

from ..p3 import aa

相对路径导入是基于 __name__ 内置变量来访问的,所以:

  1. 使用相对路径不能超出当前文件的顶级包。

    package2
      package3
        p4.py
      p5.py
    p6.py

    p4.py__name__ 值为 package2.package3.p4,顶级包为 package2, 不能通过相对路径访问 p6.py

  2. 入口文件的 __name__ 值为 __name__,所以入口文件中不能使用相对路径导入。