python基础4
包
1、什么是包?
随着模块数目的增多,把所有模块不加区分地放到一起也是极不合理的,于是python为我什么提供了一种把模块组织到一起的方法,即创建一个包。
包就是一个含有__init__.py文件的文件夹,文件夹内可以组织子模块或子包。
2、包的使用
导入包与__init__包属于模块的一种,因而包以及包内的模块均是用来被导入使用的,
1、执行包下的__init__.py文件
2、产生一个新的名称空间用于存放__init__.py执行过程中的名字
3、在当前执行文件所在的名称空间中得到一个名字pool,该名字指向__init__.py的名称空间,例如pool.xxx和pool.yyy中的xxx和yyy都是来自于pool下的__init__.py,也就是说导入包时并不会导入包下所有的子模块与子包
绝对导入与相对导入
1、绝对导入:以顶级包为起始
from pool import versins
2、相对导入:代表当前文件所在的目录,代表当前目录的上一级目录
from .import versions
针对包内部模块之间的相互导入推荐使用相对导入,需要特别强调:
1、相对导入只能在包内部使用,用相对导入不同目录下的模块是非法的
2、无论是import还是from-import,但凡是在导入时带点的,点的左边必须是包,否则语法错误
from 包 import *
最后说明一点,包内部的目录结构通常是包的开发者为了方便自己管理和维护代码而创建的,这种目录结构对包的使用者往往是无用的,此时通过操作__init__.py可以“隐藏”包内部的目录结构,降低使用难度,比如想要让使用者直接使用
软件开发的目录规范
• core/: 存放业务逻辑相关代码
? • api/: 存放接口文件,接口主要用于为业务逻辑提供数据操作。
? • db/: 存放操作数据库相关文件,主要用于与数据库交互
? • lib/: 存放程序中常用的自定义模块
? • conf/: 存放配置文件
? • run.py: 程序的启动文件,一般放在项目的根目录下,因为在运行时会默认将运行文件所在的文件夹作为sys.path的第一个路径,这样就省去了处理环境变量的步骤
? • setup.py: 安装、部署、打包的脚本。
? • requirements.txt: 存放软件依赖的外部Python包列表。