模块
为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,这个文件包含的代码就相对较少,很多变成语言都采用这种组织代码的形式,在Python里,一个.py文件就称之为一个模块(Module)
模块的好处
1.最大的好处是大大的提高了代码的可维护性,当一个模块编写完毕,就可以被其他地方引用
2.使用模块可以避免函数名和变量名的冲突。每个模块都有独立的命名空间,因此相同名字的函数和变量完全可以分别存在不同的模块中。
模块的分类-三种
1.内置标准模块(标准库),执行help('modules')查看所有python自带模块列表
2.第三方开源模块,可通过pip install 模块名 联网安装
3.自定义模块
模块的调用
import module
form module import xx
form module.xx.xx import xx as rename
from module.xx.xx import
注意:模块一旦被调用,即相当于执行了另外一个py文件里的代码
开源模块安装方式
解压执行setup.py 安装
编译编码 python setup.py build
安装远吗 python setup.py install
自动安装到site-packages下
下载安装
pip3 install xxxxx(模块名)
包(pakeage)
一个文件夹管理多个模块文件,这个文件夹就被称为包
包就是文件夹,但该文件夹下必须存在__init__.py文件,该文件的内容可以为空。__init__.py用于标识当前文件夹是一个包。
注意,在python3中,即使目录下没有__init__.py文件也能创建成功,猜测应该是解释器优化导致的,但创建包还是要记得加上这个文件吧。
包-跨模块导入
添加环境变量,把父级的路径添加到sys.path中就可以了,这样导入就相当于从父亲级开始找模块了。
import sys,os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # __file__是打印当前被执行的模块.py文件相对路径
sys.path.append(BASE_DIR)
绝对导入&相对导入
在涉及到相对导入时,package所对应的文件夹必须正确的被python解释器视作package,而不是普通文件夹。否则由于不被视为package,无法利用package之间的嵌套关系实现python中包的相对导入。
文件夹被python解释器视作package需要满足两个条件:
1.文件夹必须有__init__.py文件,该文件可以为空,但必须存在该文件。
2.不能作为顶层模块来执行该文件夹中的py文件(即不能作为主函数的入口)。
虽然python支持相对导入,但模块间的路径关系要求比较严格,处理不当很容易出错,所以并不建议在项目里经常使用。