Python之路【第三篇】:模块
定义:
包:包含__init__.py文件、模块(也是.py文件)
当包被其它模块调用时,首先会执行该包下的__init__文件
包含有模块,包可以有多级
模块的导入:
import
from...import...
当Python导入一个模块时,Python首先查找当前路径;然后查找lib目录、site-packages目录(python\Lib\site-packages)和环境变量PYTHONPATH设置的目录
被调用模块或包路径必须在主文件同级目录或sys.path列出的目录下
>>> import sys >>> sys.path ['', '/usr/lib/python26.zip', '/usr/lib/python2.6', '/usr/lib/python2.6/plat-linux2', '/usr/lib/python2.6/lib-tk', '/usr/lib/python2.6/lib-old', '/usr/lib/python2.6/lib-dynload', '/usr/lib/python2.6/site-packages']
包必须至少含有一个__init__.py文件,__init__.py文件内容可以为空,用于标识该目录是包
__init__.py文件还用于提供同一路径下的模块列表,这样可在主文件中一次导入包中的所有模块
接下来自定义包
p1的__init__.py
if __name__ == '__main__': print ('main') else: print ('p1 inited')
p2的__init__.py
if __name__ == '__main__': print ('main') else: print ('p2 inited')
p1的m1.py
def func(): print ('p1.m1.func()') if __name__ == '__main__': print ('m1.py as main processor') else: print ('m1.py is called')
p2的m2.py
def func2(): print ('p2.m2.func2()') if __name__ == '__main__': print ('m2.py as main processor') else: print ('m2.py is called')
main.py
from p1 import m1 from p2 import m2 m1.func() m2.func()
执行主文件(导入文件会执行__init__.py文件)
[root@hy p]# python main.py p1 inited m1 is called p2 inited m2 is called p1.m1.func() p1.m2.func()
谢谢