- 模块: .py文件
- 包:在一个文件夹下有多个.py文件,并且有__init__.py 文件
- import 包 导入包时__init__.py被执行,如果__init__.py为空,则无法使用模块,如果既把模块也导入了
- 那么将来可以调用包里面的模块。
- 下面有sendmsg.py 和recive.py模块 以及__init__.py 存在于Testmsg文件夹下;
main.py 采用 sendmsg.test1()
- 根据 main.py 中的 from TestMsg import * 和 __init__中的__all__来导入模块;
- 比如__all__中只有sendmsg模块 那么最后只有sendmsg 模块被导入
#receive.py
def test2():
print("-----recvmsg-test2---")
#sendmsg.py
def test1():
print("----sendmsg-test1-----")
#__init__.py
__all__ = ["sendmsg"]
#main.py
'''导入Testmsg 这个包,Testmsg含有sendmsg.py、recive.py模块以及__init__.py
当导入这个包的时候会首先执行 __init__.py,所以如果__init__.py 有打印语句那么将会打印'''
from TestMsg import *
sendmsg.test1()#调用模块sendmsg.py中的test1方法
main.py 采用 Testmsg.sendmsg.test1()
- main.py中直接是 import TestMsg 所以根据__init__来导入所需的模块
- from TestMsg import * 这句此时放在__init__.py里面,main.py 执行 import TestMsg 会首先运行__init__.py,所以sendmsg会导入到Testmsg这个包里面(暂且这么认为),因此在调用的时候要加上包的名字
#__init__.py
__all__ = ["sendmsg"]
from TestMsg import * #导入TestMsg包中的所有模块,但__all__中只有 sendmsg所以最后只导入sendmsg模块
#from . import recvmsg #从当前路径下导入recvmsg 模块
#main.py
'''导入Testmsg 这个包,Testmsg含有sendmsg.py、recive.py模块以及__init__.py
当导入这个包的时候会首先执行 __init__.py,所以如果__init__.py 有打印语句那么将会打印'''
import Testmsg
Testmsg.sendmsg.test1()#调用模块sendmsg.py中的test1方法