Python模块、包和发布模块示例代码

2023-02-01 08:57:56
目录
1.模块1.1模块的概念1.2模块的导入方式1.2.1 import导入1.2.2 from...import导入1.2.3 from...import *(了解)1.3模块的搜索顺序(扩展)1.4原则--每一个文件都应该是可以被导入的__name__属性2.包(Package)概念好处案例演练__init__.py3.发布模块(了解)3.1制作发布压缩包步骤3.2安装模块3.3 pip安装第三方模块

1.模块

1.1模块的概念

模块是python程序架构的一个核心概念

    每一个以扩展名.py结尾的python源代码文件都是一个模块模块名同样也是一个标识符,需要符合标识符的命名规则在模块中定义的全局变量、函数、类都是提供给外界直接使用的工具模块就好比工具包,要想使用这个工具包中的工具,就需要先导入这个模块

    1.2模块的导入方式

    1.2.1>
    import 模块名1,模块名2

    提示:再导入模块时,每个导入应该独占一行

    import 模块名1
    import 模块名2

    导入之后

      通过 模块名.使用模块提供的工具 -- 全局变量、函数、类

      使用as指定模块的别名

      如果模块的名字太长,可以使用as指定模块的名称,以方便在代码中的使用

      import 模块名1 as 模块别名

      注意:模块别名应该符合大驼峰命名法

      1.2.2>

        如果希望从某一个模块中,导入部分工具,就可以使用from...import的方式

        import 模块名 是一次性把模块中所有工具全部导入,并且通过 模块名/别名访问
        # 从 模块 导入 某一个工具
        from 模块名1 import 工具名

        导入之后

          不需要通过 模块名.可以直接使用 模块提供的工具 -- 全局变量、函数、类

          注意

          如果两个模块,存在同名的函数,那么 后导入模块的函数,会覆盖掉先导入的函数

            开发时import代码应该统一写在代码的顶部,更容易及时发现冲突,一旦发现冲突,可以使用 as关键字 给其中一个工具起一个别名

            1.2.3>
            # 从 模块 导入 所有工具
            from 模块名1 import *

            注意

            这种方式不推荐使用,因为函数重名并没有任何提示,出现问题不好排查

            1.3模块的搜索顺序(扩展)

            python的解释器在导入模块时,会:

              搜索当前目录指定模块名的文件,如果有就直接导入,如果没有,再搜索系统目录

              在开发时,给文件起名,不要和系统的模块文件重名

              python中每一个模块都有一个内置属性>

              示例

              import random
              print(random.__file__)
              # 生成一个 0-10 的数字
              rand = random.randint(0,10)
               
              print(rand)

              注意:如果当前目录下,存在一个random.py 的文件,程序就无法正常执行了!

                这个时候,python的解释器会加载当前目录下的random.py 而不会加载系统的random模块

                1.4原则--每一个文件都应该是可以被导入的

                  一个独立的python文件就是一个模块在导入文件时,文件中>

                  实际开发场景

                    在实际开发中,每一个模块都是独立开发的,大多都有专人负责开发人员通常会在模块下方增加一些测试代码

                    仅在模块内使用,而被导入到其它文件中不需要执行

                    __name__属性

                      __name__属性可以做到,测试模块的代码>__name__是python的一个内置属性,记录着一个字符串如果 是被其它文件导入的,__name__就是模块名如果 是当前执行的程序__name__是__main__
                      # 导入模块
                      # 定义全局变量
                      # 定义类
                      # 定义函数
                       
                      #在代码的最下方
                      def main():
                          # ...
                          pass
                       
                      # 根据 __name__ 判断是否执行下方代码
                      if __name__ == "__main__"
                          main()

                      2.包(Package)

                      概念

                        包是一个包含多个模块的特殊目录,目录下有一个特殊的文件>__init__.py的建立方式

                        利用Directory建立包,需要自己新建__init__.py文件

                        利用Pyhon.Package建立包,会自动产生__init__.py文件

                        好处

                          使用>

                          案例演练

                            新建一个>在目录下,新建两个文件 send_message和receive_message在send_message文件中定义一个send函数在receive_message文件中定义一个receive函数在外部直接导入 hm_message的包

                            __init__.py

                            要在外界使用包中的模块,需要在__init__.py中指定对外界提供的模块列表

                            # 从 当前目录 导入 模块列表
                            from  . import send_message
                            from  . import receive_message

                            3.发布模块(了解)

                            如果希望自己开发的模块,分享给其他人,可以按照以下步骤操作

                            3.1制作发布压缩包步骤

                            创建setup.py的文件

                            from distutils.core import setup
                             
                            setup(name="hm_message",  # 包名
                                  version="1.0",  # 版本
                                  description="itheima's 发送和接收消息模块",  # 描述信息
                                  long_description="完整的发送和接收消息模块",  # 完整描述信息
                                  author="itheima",  # 作者
                                  author_email="itheima@itheima.com", # 作者邮箱
                                  url="www.itheima.com", # 主页
                                  py_modules=["hm_message.send_message",
                                              "hm_message.receive_message"])

                            有关字典参数的详细信息,可以参阅官方网站:

                            https://docs.python.org/2/distutils/apiref.html

                            构建模块

                            $ python3 setup.py build

                            生成发布压缩包

                            注意:要制作哪个版本的模块,就使用哪个版本的解释器执行

                            $ python3 setup.py sdist

                            3.2安装模块

                            $ tar zxvf hm_message-1.0.tar.gz
                            $ sudo python3 setup.py install

                            卸载模块

                            直接从安装目录下,把安装模块的目录删除就可以

                            $ cd  /root/anaconda3/lib/python3.9/site-packages/
                            sudo rm -rf hm_message*

                            3.3>

                              第三方模块通常是指由 知名的第三方团队开发的 并且被程序员广泛使用的python包/模块

                              例如 pygame就是一套非常成熟的游戏开发模块

                              pip是一个现代的、通用的python包管理工具

                              提供了对python包的查找、下载、安装、卸载等功能

                              安装和卸载命令如下:

                              sudo是指要以root的身份进行执行

                              # 将模块安装到 python 2.x 环境
                              $ sudo pip install pygame
                              $ sudo pip uninstall pygame
                               
                              # 将模块安装到 python 3.x 环境
                              $ sudo pip3 install pygame
                              $ sudo pip3 uninstall pygame

                              在Mac下安装ipython

                              $ sudo pip install ipython

                              在Linux下安装ipython

                              $ sudo apt install ipython
                              $ sudo apt install ipython3

                              代码见:https://github.com/x45w/python_mokuai_bao_fabumokuai.git

                              内容总结于:https://space.bilibili.com/37974444

                              到此这篇关于Python模块、包和发布模块的文章就介绍到这了,更多相关Python模块 包内容请搜索易采站长站以前的文章或继续浏览下面的相关文章希望大家以后多多支持易采站长站!