一. 什么是模块和包
1.在开发过程中,为了使得我们的代码的可维护性和重用性更好,将很多函数按功能进行分组,分别放到不同的文件里,这些文件就叫作模块,一个.py文件就是一个模块(Module)。
2.使用模块可以避免函数名和变量名的冲突,但是我们在写模块的时候要尽量别与内置模块名字冲突,下一篇我们详细说几个常用的内置模块。
3.模块可以分为:内置模块,第三方模块,自定义模块三种。
4.模块的概念不只是python有,所有语言都有这个概念,只是名字可能不一样,在别的语言里叫作“类库”。
5.你也许会想到,不同的人如果编写的模块名相同怎么办?为了避免模块名冲突,python又引入了按目录来组织模块的方法,称为包(Package)。引入包以后,只要顶层的包名不与别人冲突,那所有的模块都不会与别人冲突。
6.怎么样就是一个包了呢?包就是一个目录吗?你可能会有这样的疑问。下面我们就聊聊他们的区别。包是一个目录,但是它也有别于目录,只有具有__init__.py文件的目录才能称之为包。
二. 模块和包的导入
上面我们已经了解了模块和包的概念和对开发带来的便利了,大家是不是很想立即使用他们呢,要使用就需要先导入。那么怎么导入模块和包呢?
只要模块或者包所在目录在sys.path中,就可以使用以下几种方式实现模块的导入:
1 #目录结构如下 2 # m_p----| 3 # |---p1---| 4 # | |---__init__.py 5 # | |---common.py 6 # | 7 # |---p2---| 8 # | |---__init__.py 9 # | |---common.py 10 # | 11 # |---test.py 12 13 #要求:我要在test.py里导入p1和p2的common,分别执行输出p1和p2的功能 14 #分析:要导入p1和p2 必须要求p1和p2所在的目录在sys.path的列表里,我们知道test.py的#sys.path里是包含其父目录的,所以可以直接导入p1和p2 15 #保险起见,我们可以确定下是否包含: 16 #test.py: 17 import sys 18 for i in sys.path: 19 print(i) 20 21 执行结果: 22 /Users/admin/stu179471/day3/m_p 23 。。。。。 24 25 #可以看出,是可以直接导入p1和p2的,因为他们的父目录m_p在sys.path里 26 #p1-common.py: 27 def f1(): 28 print("p1.common.f1") 29 #p2-common.py: 30 def f1(): 31 print("p2.common.f1") 32 #test.py: 33 from p1.common import f1 as p1_f1 34 from p2.common import f1 as p2_f1 35 36 p1_f1() 37 p2_f1() 38 39 执行结果: 40 p1.common.f1 41 p2.common.f1 42 43 #上面是包的父目录在sys.path目录里的,下面我们看个导入外部包的 44 #新的目录结构为:p1和p_m同级目录,他们的父目录为day3 45 46 for i in sys.path: 47 if "day3" in i: 48 print(i) 49 50 执行结果: 51 /Users/admin/stu179471/day3/m_p 52 53 #发现没有目录day3,将其添加到sys.path里 54 import sys,os 55 sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) 56 57 for i in sys.path: 58 if "day3" in i: 59 print(i) 60 61 执行结果: 62 /Users/admin/stu179471/day3/m_p 63 /Users/admin/stu179471/day3 64 65 #这样就可以导入并使用p1啦 66 import sys,os 67 sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) 68 69 from p1.common import f1 70 71 f1() 72 73 执行结果: 74 p1.common.f1
三. 第三方模块的使用
要使用第三方模块,首先要安装。
安装有两种方式:
(1)pip3/pip python2需要先安装pip,python3自带pip3
(2)源码安装 下载下源码之后,到源码目录里执行 python3 setup.py install
安装完成之后,我们就可以导入使用啦。