python中的包和模块

为更好的对python代码进行管理 引入 包和模块
package 包
    包含多个Python文件的文件夹
    每个包目录下都会有一个_init_.py的文件夹,这个文件必须存在的否者python会把这个目录当成普通目录而不是一个包
    _init_.py可以是一个空文件,也可以有python代码,因为他本身就是一个模块,模块名为这个包的名称也就是上级文件名
modules 模块
    每个.py文件就称为一个模块
    使用模块还可以避免函数名和变量名冲突
    较少的、独立的、功能近似的 多个变量、函数、类型的集合

使用python 中的模块
1)import hashlib 加密模块
    系统内建标准模块
    安装好python解释器环境之后,可以直接导入使用
2)pip install pygame
    第三方模块
    非官方开发的 在网络上发布的模块,供开发人员使用
    可以自己开发模块 发布并给别人使用!

包的发布操作
    标准化构建
    打包压缩
    发布
    下载 pip install 你的名字
包和模块引入,两个关键语法
?    import 包/模块
    from 包/模块 import 具体对象
1)从plane包中引入一个模块    modules
    form plane import modules

2)引入plane包中的modules模块
    import plane.mudules

创建一个包文件 python package  
    自带_init_.py文件
创建一个普通文件 directory
    将该文件变成一个包 直接在该文件夹中创建一个_init_.py文件 则该文件夹直接变成一个包

包和普通文件夹的区别:
?1)  python中的包,就是一个包含了__init__.py文件的特殊文件夹
?2)  python中的包可以有效的管理和组织python中的模块
  3)  普通文件夹~也是一种最简单的(人工约定)包!没有通过__init__.py声明的包那么强大

获取某个值的内存地址
     a=100
    pirnt(id(a))

from import 相对引入(要有相对的文件夹,或者参照的模块)
    from . import xxx # 从当前模块路径下,引入xxx模块
    from .. import xxx # 从当前模块的父级路径下,引入xxx模块
from import 绝对引入
    from pkg import module  # 从 pkg包中引入一个模块module
    from pkg.module import vars, func, clazz# 从指定的模块中直接引入

    _init_.py 引入  __all__=["模块名"]


3. 相对引入 & 绝对引入

    相对引入:相对当前文件路径,参照父级文件路径
    |-- demo/
        |-- utils.py
        |-- main.py  [from . import utils]

    运行:添加参照路径:python -m demo.main
            运行过程中,在main.py中找到相对路径的utils.py

    绝对引入:针对包/项目/模块,直接引入的方式
    |-- demo/
        |-- users/
            |-- __init__.py
            |-- tools.py
        |-- utils.py
        |- main.py
                [import utils]
                [from users import tools]
                [绝对引入:查询路径]
                    [当前文件夹|PYTHONPATH|sys.path]

当代码写的出入较大时 能注释的代码尽量不要删除
测试模块
通过Python命令执行当前文件才会执行,被其他模块执行不会执行
if__name__ =="__main__": 文件名:main
    # 只有执行当前文件是才会执行if中的代码
    # 被其他模块引用是不会执行
    test()

 标准化规范 python: PEP8规范
项目规范 :模块化开发项目规范
 定义数据的模块:声明各种变量、数据结构,临时存储数据
                data.py[user_score=0 | USER_COMM_LEVEL=1 | USER_COMM_LEVEL=2]
                    和数据无关的代码,不允许写到该模块中
            定义工具的模块
                主要是辅助处理项目的各种函数
                    和处理功能无关的函数、类型、变量...不要定义在该模块中
            定义类型的模块
                主要是项目中需要的各种自定义类型[class 声明的类型]
                    类型:为了封装数据而出现的[用户类型、文章类型、评论类型]
            定义服务的模块
                主要是和类型模块相互作用,用来管理类型模块中创建的各种对象的
                    服务:为了处理对象[用户服务类(增删改查用户对象)]
            测试模块
                内置的用于当前模块开发过程中的正确性验证代码!
                一般开发人员不会删除~~而是提供出来让其他使用者有一个参考操作!
            ...

    模糊导入:可以通过from 包名称 import * 导入需要的模块
        慎重使用!语法糖!
        __all__ []值为一个列表,
        如果项目代码引入的包文件并不是很多,可以参考使用
        
        如果项目代码引入的包文件非常庞大,不要使用模糊导入


自定义包发布
    本地操作
        将包文件按标准格式进行规范处理 打包备份
        常规 通过tar命令 备份压缩
              备份tar -cvf (打包文件名称.tar)(原文件名/)
              通过FTP上传本地文件覆盖服务器
        较常见 通过系统提供的进行打包备份
    远程操作
        包文件标准化构建
        包文件打包处理
        上传发布到网络

猜你喜欢

转载自blog.csdn.net/jinianh/article/details/81666214