# aaa/__init__.py print(__name__) num = 10
"""
__init__.py是个什么鬼?
包的本质就是文件夹,导入包就相当于导入包下的__init__.py文件
""" # a.py import aaa print(aaa.num)
执行结果:
aaa
10
看个复杂的包的使用各种报错(这种导入包的方式不推荐)
# a.py import os os.makedirs('glance/api') # 创建目录 os.makedirs('glance/cmd') os.makedirs('glance/db') init_lst = ['glance/__init__.py', 'glance/api/__init__.py', 'glance/cmd/__init__.py', 'glance/db/__init__.py'] for initFile in init_lst: # 创建文件并写入内容 with open(initFile, "w", encoding="utf-8") as f: f.write(f"""#{initFile}""") file_lst = ['glance/api/versions.py', 'glance/cmd/manage.py', 'glance/db/models.py', 'glance/api/policy.py'] for filePath in file_lst: with open(filePath, "w", encoding="utf-8") as f: # 创建文件并写入内容 f.write(f"""# {filePath} def func(): print("我在{filePath}中")""")
执行这个a.py文件,会创建一个glance文件夹,里面有三个文件夹api、cmd 和db,有几个py文件。
# b.py import glance glance.api.policy.func()
执行结果:
Traceback (most recent call last): File "G:/python28/code/day06/整理笔记/python模块的使用/b.py", line 5, in <module> glance.api.policy.func() AttributeError: module 'glance' has no attribute 'api'
原因分析:
因为glance.api实际上是导入的glance下的__init__.py,因为glance/__init__.py是个空文件,并没有api包的导入,所以报错。
解决这个报错:
#glance/__init__.py import glance.api
执行结果:
Traceback (most recent call last): File "G:/python28/code/day06/整理笔记/python模块的使用/b.py", line 5, in <module> glance.api.policy.func() AttributeError: module 'glance.api' has no attribute 'policy'
依然报错,接着按照上面的处理方法处理:
#glance/api/__init__.py import glance.api.policy
执行结果:
我在glance/api/policy.py中
正常了,但是这个解决办法太麻烦了,需要在每个包的__init__.py文件中做包和模块的导入。