模块
目标
● 模块
● 包
● 发布模块
01.模块
1.1 模块的概念
模块是Python程序架构的一个核心概念
● 每一个以扩展名py结尾的Python源代码文件都是一个模块
● 模块名同样也是一个标识符,需要符合标识符的命名规则
● 在模块中定义的全局变量、函数、类都是提供给外界直接使用的工具
● 模块就好比是一个工具包,要想使用这个工具包的工具,就需要先导入这个模块
1.2 模块的两种导入方式
1)import导入
import 模块名1, 模块名2
提示:在导入模块时,每个导入应该独占一行
import 模块1
import 模块2
● 导入之后:
通过模块名. 的方式使用模块提供的工具——全局变量、函数、类
py_01_测试模块1.py
# 全局变量
title = "模块1"
# 函数
def say_hello():
print("我是%s" % title)
# 类
class Dog(object):
pass
py_02_测试模块2.py
# 全局变量
title = "模块2"
# 函数
def say_hello():
print("我是%s" % title)
# 类
class Cat(object):
pass
py_03_import导入模块.py
import py_01_测试模块1
import py_02_测试模块2
py_01_测试模块1.say_hello()
py_02_测试模块2.say_hello()
dog = py_01_测试模块1.Dog()
print(dog)
cat = py_02_测试模块2.Cat()
print(cat)
模块别名
import 模块名1 as 模块别名
import py_01_测试模块1 as DogDemo1
import py_02_测试模块2 as CatDemo2
DogDemo1.say_hello()
CatDemo2.say_hello()
dog = DogDemo1.Dog()
print(dog)
cat = CatDemo2.Cat()
print(cat)
2)from … import 导入
● 如果希望从某一个模块中,导入部分工具,就可以使用from … import的方式
● import 模块名 是一次性把模块中所有工具全部导入,并且通过模块名/别名访问
from 模块名1 import 工具名
● 导入之后
不需要通过模块名.的方式来调用,可以直接使用模块提供的工具——全局变量、函数、类
注意:如果两个模块,存在同名的函数,那么后导入模块的函数,会覆盖掉先导入的函数
● 开发时,import代码应该统一写在代码的顶部,更容易及时发现冲突
● 一旦发现冲突,可以使用as关键字给其中一个工具起别名
** from…import* **
一次性导入所有工具
1.3 模块的搜索顺序【扩展】
Python解释器在导入模块时,会:
1、搜索当前目录指定模块名的文件,如果有就直接导入
2、如果没有,再搜索系统目录
在开发时,给文件起名不要和系统的模块文件重名
Python中每一个模块都有一个内置属性 __ file __ 可以查看模块的完整路径
1.4 原则——每一个文件都应该是可以被导入的
● 一个独立的Python文件就是一个模块
● 在导入文件是,文件中所有没有任何缩进的代码都会被执行一遍
实际开发场景
● 在实际开发中,每一个模块都是独立开放的,大多都有专人负责
● 开发人员通常会在模块下方增加一些测试代码(仅在模块内部使用,而被导入到其他文件是不需要执行)
__ name __ 属性
● __ name __ 属性可以做到测试模块的代码只在测试情况下被运行,而在被导入时不会被运行
● __ name __ 属性是Python的一个内置属性,记录着一个字符串
● 如果是被其他文件导入的, __ name __ 就是模块名
● 如果是当前执行的程序,__ name __ 是 __ main __
02.包
概念
● 包是一个包含多个模块的特殊目录
● 目录下有一个特殊的文件 __ init __ .py
● 包名的命名方式和变量名一致,小写字母 + _
好处
● 使用import 包名 可以一次性导入包中的所有模块
案例演示
1、新建一个py_message的包
2、在目录下,新建两个文件send_message和receive_message
3、在send_message 文件中定义一个send函数
4、在receive_message 文件中定义一个receive函数
5、字外部直接导入py_message 的包
__ init __ .py
● 要在外界使用包中的模块,需要在 __ init __ .py 中指定对外界提供的模块列表
03.发布模块(了解)
● 如果希望自己开发的模块,分享给其他人,可以按照以下步骤操作
3.1 制作发布压缩包步骤
1)创建setup .py
● setup .py 的文件
from distutils.core import setup
setup(name="py_message", # 包名
version="1.0", # 版本
description="py's send and receive message", # 描述信息
long_description="all send and receive message", # 完整描述信息
author="py", # 作者
author_email="[email protected]", # 作者邮箱
url="www.py.com", # 主页
py_modules=["py_message.send_message",
"py_message.receive_message"])
2)构建模块
在Python 3.x 中,setup .py bulid
3)生成发布压缩包
在Python 3.x 中,setup .py sdist