自定义Python模块
模块的概念
模块是python程序架构的一个核心概念
每一个以扩展名.py
结尾的Python
源代码文件都是上一个模块。模块名同样也是一个标识符,需要符合标识符的命名规则
在模块中定义的全局变量、函数、类 都是提供给外接直接使用的工具。
模块就好比是工具包,要想使用这个工具包中的工具,就需要先导入这个模块。
模块的两种导入方式
-
import
导入在导入多个模块时,每个导入应独占一行
import 模块名1 import 模块名2
导入之后,可以通过模块名,使用模块提供的工具——全局变量、函数、类。
如果模块的名字太长,可以使用
as
指定模块的名称,以方便在代码中的使用。import 模块名1 as 模块别名
模块别名需符合大驼峰命名法
-
from ... import
导入import 模块名
是一次性把模块中的所有工具全部导入,并且通过模块名/别名 访问,但是如果希望从某个模块中导入部分工具,就可以使用from ... import
的方式。# 从模块导入某一个工具 from 模块名1 improt 工具名
导入之后,不需要通过模块名,可以直接使用模块提供的工具——全局变量、函数、类。
如果两个模块存在同名的函数,则后导入模块的函数,会覆盖掉先导入模块的函数
-
开发时
import
代码应统一些在代码的顶部,更容易及时发现冲突 -
一旦发现冲突,可以使用
as
关键字给其中一个工具起一个别名。
注意:
from 模块名 import *
这种方式可以一次性导入模块名下所以方法,不推荐使用,因为函数重名没有任何的提示,出现问题不好排查。 -
模块的搜索顺序
Python 解释器在导入模块时,会:
-
搜索当前目录指定模块名的文件,如果有就直接导入
-
如果没有,再搜索系统目录
在开发时,给文件起名,不要和系统的文件名重名。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
发布模块
如果希望自己开发的模块分享给其他人,可以安装以下步骤操作:
制作发布压缩包
-
创建
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"])
-
构建模块
$ python setup.py build
执行完成后,会在当前目录下生成一个
build
目录 -
生成发布压缩包
$ 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*
- 点赞
- 收藏
- 关注作者
评论(0)