自定义Python模块

举报
冰露 发表于 2021/11/15 14:33:58 2021/11/15
【摘要】 模块的概念模块是python程序架构的一个核心概念每一个以扩展名.py结尾的Python源代码文件都是上一个模块。模块名同样也是一个标识符,需要符合标识符的命名规则在模块中定义的全局变量、函数、类 都是提供给外接直接使用的工具。模块就好比是工具包,要想使用这个工具包中的工具,就需要先导入这个模块。模块的两种导入方式import导入在导入多个模块时,每个导入应独占一行import 模块名1im...

模块的概念

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

每一个以扩展名.py结尾的Python源代码文件都是上一个模块。模块名同样也是一个标识符,需要符合标识符的命名规则

在模块中定义的全局变量、函数、类 都是提供给外接直接使用的工具。

模块就好比是工具包,要想使用这个工具包中的工具,就需要先导入这个模块。

模块的两种导入方式

  1. import导入

    在导入多个模块时,每个导入应独占一行

    import 模块名1
    import 模块名2

    导入之后,可以通过模块名,使用模块提供的工具——全局变量、函数、类。

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

    import 模块名1 as 模块别名

    模块别名需符合大驼峰命名

  2. from ... import导入

    import 模块名是一次性把模块中的所有工具全部导入,并且通过模块名/别名 访问,但是如果希望从某个模块中导入部分工具,就可以使用from ... import的方式。

    # 从模块导入某一个工具 
    from 模块名1 improt 工具名

    导入之后,不需要通过模块名,可以直接使用模块提供的工具——全局变量、函数、类。

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

    • 开发时import代码应统一些在代码的顶部,更容易及时发现冲突

    • 一旦发现冲突,可以使用as关键字给其中一个工具起一个别名。

    注意: from 模块名 import *这种方式可以一次性导入模块名下所以方法,不推荐使用,因为函数重名没有任何的提示,出现问题不好排查。

模块的搜索顺序

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

  1. 搜索当前目录指定模块名的文件,如果有就直接导入

  2. 如果没有,再搜索系统目录

在开发时,给文件起名,不要和系统的文件名重名。Python中每一个模块都有一个内置属性__file__可以查看模块的完整路径。

# 示例
import random
​
# 生成一个0~10的数字
data = random.randint(0, 10)
print(data)

注意:如果当前目录下,已存在一个random.py文件,程序就无法正常运行了,此时,Python解释器会加载当前目录下的random.py而不会加载系统的random模块。

开发原则

一个独立的python 文件就是一个模块,在导入文件时,文件中所有没有任何缩进的代码都会被执行一遍。

在实际开发中,每一个模块都是独立开发的,大多有专人负责。开发人员通常会在模块下方增加些测试代码,用于仅在模块内使用,而被导入到其他文件中不需要执行。__name__ 属性可以做到。

__name__是python的一个内置属性,记录着一个字符串

  • 如果是被其他文件导入的, __name__就是模块名;

  • 如果是当前执行的程序,__name__ 是 __main__

很多python 文件中都会看到以下格式的代码:

# 导入模块
# 定义全局变量
# 定义类
# 定义函数
​
# 在代码的最下方
def main():
    # ...
    pass
​
if __name__ == "__main__":
    main()

包的概念

  • 包是一个包含多个模块的特殊目录

  • 目录下有一个特殊的文件__init.py

  • 包的命名方式和变量名一致,小写字母 + _

包的使用

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

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

发布模块

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

制作发布压缩包

  1. 创建setup.py文件

    from distutils.core import setup
    ​
    setup(name="message",  # 包名
          version="1.0",   # 版本
          description="user's 发送和介绍消息模块",     # 描述信息
          long_description="完整的发送和接受消息模块",  # 完整描述信息
          author="user",    # 作者
          author_email="",  # 作者邮箱
          url="",  # 主页
          py_modules=["message.send_message",
                      "message.receive_message"])
  2. 构建模块

    $ python setup.py build

    执行完成后,会在当前目录下生成一个build目录

  3. 生成发布压缩包

    $ python setup.py sdist

    执行完成后,会在当前目录下生成一个dist目录,包含一个文件message-1.0.tar.gz

安装模块

$ tar -zxvf message-1.0.tar.gz
$ sudo python setup.py install

卸载模块

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

$ cd /user/local/lib/python3.8/dist-packages/
$ sudo rm -r message*
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。