包的介绍

1,什么是包?

  包是一种通过'.模块名'来组织python名称空间的方式

  通俗的开讲: 包就是一个具有__init__.py文件的文件夹,所以创建包的意义就是用一个文件将文件/模块组织起来

强调:

  1),在python3中,即是包下没有__init__.py文件,import包仍然不会报错,而在python2中,包下一定要有__init__.py文件,否则import包就会报错

  2), 创建包的目的不是为了运行,而是被导入使用,包只是模块的一种形式,包的本质就是一种模块

2, 为何要使用包?

  包的本质就是一个文件夹,那么文件夹唯一的功能就是将文件组织起来. 随着功能越写越多,我们无法将所有功能都放到一个文件中,于是我们使用模块去组织功能,而随着模块越来越多,我们就需要用文件夹将模块文件组织起来,以此来提高程序的结构性和可维护性

3,包的使用之 import

  单独导入包名称时不会导入包中所有包含的所有子模块

#在与glance同级的test.py中
import glance
glance.cmd.manage.main()

'''
执行结果:
AttributeError: module 'glance' has no attribute 'cmd'

'''

4, 包的使用之 from...import...

  需要注意的是from后import导入的模块,必须是明确的一个不能带点,否则会有语法错误

5, 想要从包中导入所有,如果按照模块内导入所有的方法实际上只会导入包下__init__.py文件中定义的名字,可以在文件中定义__all__

6, 包以及包所包含的模块都是用来被导入的,而不是被直接执行的.而环境变量都是以执行文件为准的

7, 绝对导入与相对导入总结

  绝对导入: 以执行文件的sys.path为起始点开始导入,称之为绝对导入

    优点: 执行文件与被导入的模块中都可以使用

    缺点: 所有导入都是以sys.path为起始点,导入麻烦

  相对导入: 参照当前所在文件的文件夹为起始开始查找,称之为相对导入

    符号:  . (一个点)代表当前所在文件的文件夹,  ..(两个点)代表上一级文件夹,  ...(三个点)代表上一级的上一级文件夹

    优点: 导入更加简单

    缺点: 只能在导入包中的模块时才能使用

  注意:  1),相对导入只能用于包内部模块之间的相互导入,导入者与被导入者都必须存在于一个包内

     2), 试图在顶级包之外使用相对导入是错误的,言外之意,必须在顶级包内使用相对导入,每增加一个,代表调到上一级文件夹,而上一级不应该超出定级包.

原文地址:https://www.cnblogs.com/kp1995/p/10072601.html