这里写自定义目录标题
Python中的包和模块
概念解释
- 模块: 为了使代码更加容易维护,提高代码重用价值,可以将一组相关功能的代码写入一个单独的py文件中供别人使用,这个.py文件就叫做做一个模块
- 包: 包是一个有层次的文件目录结构,它定义了由n个模块或者n个子包。具体的表现形式就是每一个包下都包含
__init__.py
,这个目录下一定有__init__.py
文件和其他模块或子包 - 库:参照了其他的编程语言的概念,具体表现也是一个模块或者是包,表示的是完成一定功能的代码合集。
- 框架: 表示的是一个架构层的概念,从库功能的角度来看,解决一个开放性的问题二设计的具有一定约束性的支撑框架。通过一个框架,可以快速实现一个问题解决的骨架。针对这个已经设计好的框架去进行角色填充。
包和模块的分类
1. 标准的包和模块
安装Python之后,自动安装好的一些系统模块,可以直接导入使用。每一个安装Python的用户电脑上都有这个模块,满足了基本的开发需求。
在Python中有一些预制的模块,就是存放在builtin模块中,在Python 3中存放在builtins 模块中。比如说print函数就是属于这个预制模块中的。
2. 三方包和模块
非系统自带安装模块,属于第三方开发人员开发的,需要下载和安装才可以使用。
3. 自定义的包和模块
我们自己开发的一些包和模块,发布出去给别人用。
包和模块的位置
当我们使用Python的编译器工具,比如Pycharm时,我们导入一个包,把鼠标放在这个导入的模块上,就会出现这个模块或者包存放的位置。
或者使用print(os.__file__)
dir(XXX)
查看到这个模块所在的位置,其中XXX表示的待查看的模块的名字。
包和模块的导入
模块的导入
单个模块的导入 import M
多个模块的导入 import M1, M2
导入的时候取一个别名 import M as 别名
包的导入,不能直接 import package_name , 如果直接导入一个包,整个包不会被完全导入,只会导入了__init__.py 这一个初始文件
单个包的导入 import package.M
多个模块的导入 import p1.M1, p2.M2
导入的时候取一个别名 import p1.M as 别名
导入包的时候还可以借助于from 语句, from A import B[as c]
引入单个模块
from p1 import M1
引入这个包的多个模块
from p1 import M1, M2
引入时起别名
from p1 import M1 as mm1, M2 as mm2
发布一个软件包
假设我们自己开发了一个软件包,并且我们要发布我们的软件包到pypi仓库上去,我们需要构建一个项目,这个项目的结构如下所示:
在项目取名的时候有几个命名建议是需要注意的
- 包名需要全部小写
- 多个单次以中划线-作为分割,不要使用 _ , 因为pip安装使用 _ 支持不是很友好
- 包名不能合pypi上已经有的重名
在这里我们的setup.py是写了项目信息的配置文件,这里面有一个执行函数,通过这个函数来知名信息。写setup函