1.自定义包
包
就是一个至少包含__init__.py
文件的文件夹,这个文件是必须存在的,否则,Python
就把这个目录当成普通目录(文件夹),而不是一个包
。__init__.py
可以是空文件,也可以有Python代码
,因为__init__.py
本身就是一个模块,而它的模块名就是对应包的名字。调用包就是执行包下的__init__.py
文件。
以下自定义了一个包,包所在的目录为D:\Code_Sources\Python\Test\
,即就是这个目录下有个叫parent
的包。
1.1. parent 目录中的文件
init.py
1 2 3 4 5 6
|
if __name__ == '__main__': print('parent 作为主程序运行') else: print('parent 初始化')
|
1.2. pack 目录中的文件
init.py
1 2 3 4 5 6
|
if __name__ == '__main__': print('作为主程序运行') else: print('Pack初始化')
|
1 2 3 4 5 6 7 8
| def func(): print('pack.mod.func()')
if __name__ == '__main__': print('mod 作为主程序运行') else: print('mod 被另一个模块调用')
|
1.3. pack2 目录中的文件
init.py
1 2 3 4 5 6 7 8 9
|
__all__ = ["mod2_1", "mod2_2", "mod2_3"]
if __name__ == '__main__': print('Pack2作为主程序运行') else: print('Pack2初始化')
|
mod2_1.py
1 2 3 4 5 6 7 8
| def func(): print('pack2.mod2_1.func()')
if __name__ == '__main__': print('mod2_1 作为主程序运行') else: print('mod2_1 被另一个模块调用')
|
mod2_2.py
1 2 3 4 5 6 7 8
| def func(): print('pack2.mod2_2.func()')
if __name__ == '__main__': print('mod2_2 作为主程序运行') else: print('mod2_2 被另一个模块调用')
|
2.导入(自定义)包的3种方法
我在桌面C:\Users\Administrator\Desktop\
新建了一个main.py
文件**(和自定义的包不在一个目录)**,自定义包的目录:D:\Code_Sources\Python\Test\
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| import sys
sys.path.append(r"D:\Code_Sources\Python\Test")
print('-----开始import-----\n')
import parent.pack2.mod2_1 import parent.pack2.mod2_2 as p2m2 from parent.pack.mod import *
if __name__ == '__main__': print('-----开始main-----\n')
parent.pack2.mod2_1.func() p2m2.func() func() print('\npack2包中的模块有:') print(parent.pack2.__all__)
|
运行结果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| -----开始import-----
parent 初始化 Pack2初始化 mod2_1 被另一个模块调用 mod2_2 被另一个模块调用 Pack初始化 mod 被另一个模块调用 -----开始main-----
pack2.mod2_1.func() pack2.mod2_2.func() pack.mod.func()
pack2包中的模块有: ['mod2_1', 'mod2_2', 'mod2_3']
请按任意键继续. . .
|
Reference
- 原文转载
- 在Python中以绝对路径或者相对路径导入文件的方法