文章前置:
1.默认是python3
2.默认代码放在默认在lib路径下,如果想看关于路径可以看另外一篇文章-->
3.window 下进入cmd命令,python3 (这是我改名成python3了)
一、导入包
先来一个测试数据准备工作下:
文件目录结构(包):
TestMsg/
__init__.py
recvmsg.py
sendmsg.py
模块中包含的函数(功能):
sendmsg.py
test1()
recvmsg.py
test2()
__init__的代码:
#空
sendmsg的代码:
def test1():
print("---测试-sendmsg模块-test1函数---")
recvmsg的代码
def test2():
print("---测试-recvmsg模块-test2函数---")
(一)、import导入
想使用包中的模块:
import TestMsg.sendmsg
TestMsg.sendmsg.test1()
注意:要细化到模块,如果只写import 包名 ,那么只需要在init.py文件中再添加行 from . import 模块名(一个点代表当前层),才能运行成功
执行结果
想直接导入包!一句话搞定导入包:添加from . import 模块名 ,不添加则会报错
修改__init__.py文件如下:
from . import sendmsg
代码:
import TestMsg
TestMsg.sendmsg.test1()
运行结果:
你会发现问题,我每用包中一个模块,我就要写一句import ,麻烦!
(二)、 from 包名 import *
使用from 语句,需要添加__all__变量,修改__init__.py文件如下:
__all__ = ["sendmsg"] #控制from语句导入时,能使用的模块,模块名不在这变量里,则无法使用
from . import sendmsg
方便的方法来了,代码:
from TestMsg import *
sendmsg.test1()
执行结果:
发现了吗?导入包是成功的,但是调用报错了,提示不存在?
因为all变量,在init文件中,有变量__all__ = ["sendmsg"] 。控制了你使用from 方式导入
只要修改下init文件就好了,解决报错
__all__ = ["sendmsg","recvmsg"] #控制from语句导入时,能使用的模块,模块名不在这变量里,则无法使用
from . import sendmsg
总结:以上方法都可以,如果将来路径更改,有的from语句会失效。大家根据自己喜好和需求来吧。
二、导入模块
(一)、import导入