''' import 模块 发生了三件事: 1,在内存中开辟一个名称空间aaa 2,自动将包下面的__init__文件中代码加载到内存。 3, 通过aaa. 获取模块中的对象。 ''' # import from ... import ... # 已知aaa目录下的m1.py里面 # x = 1 # y = 2 # z = 3333 # import aaa # 实际引用的 aaa 下面的__init__文件 # print(aaa.x) # # print(aaa.y) # # print(aaa.z) # 方法一:可以 # from aaa import m1 # m1.func1() # 方法二: # 在aaa所在的__init__.py里面加入 from aaa import m1 # 这样可以 # 然后执行 # import aaa # aaa.m1.func1() # 方法三: # from aaa.m1 import func1 # func1() # import sys # print(sys.path) # sys.path.pop(1) # print(sys.path) # import aaa # aaa.m1.func1() # 引用bbb # 在aaa下的__init__.py里面写入 bbb = 'alex' # import aaa # print(aaa.bbb) #alex # 在aaa包下创建一个bbb包,bbb下的__init__.py里面写入 xx = 'oo' oo = 'xx' # import aaa #直接引用不到,需要在aaa的__init__.py里面写入from aaa import bbb # print(aaa.bbb.xx) # print(aaa.bbb.oo) import aaa #直接引用不到,需要在bbb下的__init__.py里面写入from aaa.bbb import m2 aaa.bbb.m2.func2() # 总结: # 执行文件!!的当前目录是在sys.path的第一个参数。 # 所以当前目录的文件可以直接import。 # 无论怎么样导入文件import 还是 from ... import ... 一定是从执行文件当前目录开始。 # 模块的分发 # import NB as nb # nb.f1() # nb.f2() # nb.f3() # nb.f4() # nb.f5() # nb.f6() # 相对导入,绝对导入 # # 包的总结: # 如果要是 from 包.包.包(执行文件同一个目录,sys.path) import ... 那么 __init__ 可以不用任何操作 # .的左边一定是包 # 如果你是 import 包 __init__ 必须要各种写。 # import sys # print(sys.path)