python引入包模块
包:实在文件夹的基础上另外多包含了一个叫__init__.py的文件,它是几个模块的集合
假设我们实例的模块或者说文件目录结构如图,模块目录下除__init__.py文件外的其他py文件中都包含一个echo方法,打印自己的方法名。
如果我们要导入one01.py这个模块,name我们有以下三种写法:
方法一:
1 | import my_moudles.one.one01 |
这样写导入包模块太长,我们可以简化用别名调用
1 | import my_moudles.one.one01 as one01 |
方法二:
1 | from my_moudles.one import one01 |
方法三:
1 | from my_moudles.one.one01 import echo |
下面说下只导入包,去使用包下面的模块。我们知道,包下面有很多模块,我们如果要调用所有其下的模块不可能一一写出来,这样太麻烦了。其实一开始我们注意到每个包中都包含一个叫__init__.py文件,我们直接调用包会发现,直接执行了其下的__init__.py文件由此我们想到是否可以在这个init文件上做文章。通过引入包的测试我们能得到以下结论:
# 直接导入包 ,需要通过设计init文件,来完成导入包之后的操作
# 导入一个包
# 不意味着这个包下面的所有内容都是可以被使用的
# 导入一个包到底发生什么了?
# 相当于执行了这个包下面的__init__.py文件
导入包类似路径引入路径,可分为绝对导入和相对导入
绝对导入:
# 在执行一个py脚本的时候,这个脚本以及和这个脚本同级的模块中只能用绝对导入
# 缺点
# 所有的导入都要从一个根目录下往后解释文件夹之间的关系
# 如果当前导入包的文件和被导入的包的位置关系发生了变化,那么所有的init文件都要做相应的调整
这里我们使用绝对导入来使用包下的模块—–
首先修改my_modules下的init文件如下
1 | from my_moudles import one,two,three |
这样等于又引入了三个模块包,其次呢我们依次需要在one、two、three中修改其下的init文件
1 | from my_moudles.one import one01,one02 |
这样我们就可以使用my_modules下的所有模块了
1 | my_moudles |
相对导入:
# 不需要去反复的修改路径
# 只要一个包中的所有文件夹和文件的相对位置不发生改变
# 也不需要去关心当前这个包和被执行的文件之间的层级关系
# 缺点
# 含有相对导入的py文件不能被直接执行
# 必须放在包中被导入的调用才能正常的使用
这里我们使用相对导入来使用包下的模块—–
.跟我们路径中使用方式一样,.代表当前目录;..代表当前目录的上一层
首先修改my_modules下的init文件如下
1 | from . import one,two,three |
这样等于又引入了三个模块包,其次呢我们依次需要在one、two、three中修改其下的init文件
1 | from . import one01,one02 |
这样我们就可以使用my_modules下的所有模块了
1 | my_moudles |