python包(模块包) package
1、包(模块包) package
包是将模块以文件夹的组织形式进行分组管理的方法
作用:
将一系列模块进行分类管理,有利于防止命名冲突
可以在需要时加载一个或部分模块,则不是全部模块
包示例: mypack/ __init__.py menu.py games/ __init__.py contra.py supermario.py tanks.py office/ __init__.py excel.py word.py
2、包的导入:
同模块的导入规则
import 包名 [as 包别名]
import 包名.模块名 [as 模块新名]
import 包名.子包名.模块名 [as 模块新名]
from 包名 import 模块名 [as 模块新名]
from 包名.子包名 import 模块名 [as 模块新名]
from 包名.子包名.模块名 import 属性名 [as 属性新名]
from 包名 import *
from 包名.模块名 import *
...
3、import 语句搜索包的路径的顺序
1. 搜索程序的运行时路径(当前工作目录)
2. sys.path提供的路径
4、包的 __init__.py 文件
__init__.py 是常规包内必须存在的文件
__init__.py 会在包加载时被自动调用
__init__.py 内的__all__ 列表
作用:
用来记录此包中有哪儿些子包或模块需要导入当用from 包 import * 语句导入模块时,只查找__all__中所有模块或子包
说明:
__all__ 列表只对 from xxx import *语句起作用
__all__ = ['contra', 'tanks'] # 此示列会影响 # from mypack.games import * 导入时,会导入contra 模块 # 和 tanks 模块 print("mypack.games里的__init__.py 被调用")
5、包的相对导入
包的相对导入是指包内模块的相互导入
语法:
from 相对路径包或模块 import 属性或模块名
或
from 相对路径包或模块 import *
相对路径:
在 from import 语句和 from import *语句中可以使用相对导入from 和 import 间可以用相对路径
. 代表当前目录
.. 代表上一级目录
... 代表上二级目录
.... 以此类推
注: 相对导入时不能超出包的外部
# file: mypack/games/contra.py
def play(): print("正在玩魂斗罗!") def game_over(): print("游戏结束!") # 用绝对导入 # from mypack.menu import show_menu # 相对导入 from ..menu import show_menu show_menu() # 调用tanks里的play函数 # from .tanks import play from ..games.tanks import play # 如下是错的, ... 已经超出的包的最外部 # from ...mypack.game.tanks import play play() print("魂斗罗模块被加载!!!")