[Python3]模块和包介绍

模块
    为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,这个文件包含的代码就相对较少,很多变成语言都采用这种组织代码的形式,在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支持相对导入,但模块间的路径关系要求比较严格,处理不当很容易出错,所以并不建议在项目里经常使用。

猜你喜欢

转载自blog.csdn.net/TynMhxx/article/details/81266722