Python模块与包
模块
在Python中,模块是最高级别的程序组织单元,它将程序代码和数据封装起来以便再利用,同时提供自包含的命名空间从而避免程序出现变量名冲突。
模块处理
语句或函数 | 作用 |
---|---|
import | 使用户程序(导入者)以一个整体获取一个模块 |
from | 允许用户程序从一个模块文件中获取特定的名称 |
imp.reload | 提供了一种在不终止Pyhthon程序的情况下重新载入模块文件代码的方法 |
模块搜索路径
1.程序的主目录
2.PYTHONPATH目录(如果设置了的话)
3.标准库目录
4.任何.pth文件中的内容(如果存在的话)
5.第三方扩展应用的site-packages主目录
以上五个·组件组合起来就变成了sys.path
模块搜索路径sys.path
1.sys模块的sys.path属性返回一个路径列表
2.使用import语句导入模块时,系统自动从该列表的搜索路径中搜索模块,如果没有找到,则程序报错
模块搜索路径示例
>>>import sys
>>>sys.path
临时增加模块搜索路径示例
>>>import sys
>>>sys.path.append('c:\\pythonpa\works')
模块代码编写基础
模块的创建
使用文本编辑器把一些Python代码输入至文本文件中,然后以“.py”为后缀名进行保存,这样创建出的任何文件都被自动认为是Python的模块。
Python 文件中的每个 都可以做为一模块存在, 文件名即模块名。
import os
os.getcwd() #查看当前路径
os.chdir('F:\\my_modules') #修改当前路径
import sys
sys.path #查看搜索路径
模块文件名
模块怎么命名都可以,但如果打算将其导入,模块文件名就应该以.py结尾。因为模块名在Python程序中会变成变量名,所以遵循一般变量名的命名规则。
模块的使用
1.import语句
2.from语句
3.from*语句
import和from是可执行的语句,而不是编译时的声明。被导入的模块和名称,只有在它们所对应的import或from语句执行后,才可以使用。
导入方式
方法 | 方法示例 | 调用 | 调用示例 |
---|---|---|---|
import 模块名 | import combinatorial | 模块名.函数名 | combinatorial.fac(10) |
from模块名import函数名 | from combinatorial import fac,comb | 函数名 | fac(10) |
from模块名import* | from combinatorial import * | 函数名 | fac(10) |
使用from…import…语句可简化方法的调用方式,但若导入文件中存在与导入内容重名的方法、变量或类时,程序执行将会出错。因此,相对而言,使用import语句导入模块更为安全。
模块的属性
_ _ all _ _属性
##my_module.py
__all__ = [] #__all__变量控制模块里哪些功能可以使用*号导入
def special_add(a,b):
return a+b+100
pipi=9.999
>>>import my_module import *
>>>special_add(3,5)
108
_ _ name _ _属性
模块的测试代码
1.每个模块都有一个名称,通过特殊变量__name__
2.特别地,当一个模块被用户单独运行时,其__name__的值为‘main’。故可以把模块源代码文件的测试代码写在相应的测试判断中,以保证只有在单独运行时,才会运行测试代码
>>>import my_module
下面测试该模块的功能是否正常:
测试1:测试本模块的特殊加法是否在原有结果上增加100:
整数3与5的和在本模块中的结果为:108
测试2:测试常数pipi是否等于9.999:
本模块中变量pipi的值为:9.999
__name__ = __main__
#直接运行模块代码,__name__取值为“__main__”
__name__ = my_module
#导入模块时,__name__取值为模块名称
模块的导入特性
模块在被导入时,会被执行一次
这个过程也叫做加载。一个模块即使被多次导入程序,也只会被加载一次。
模块的缓存
.pyc文件
- .pyc文件是经过编译后的字节码,这样下次导入时,如果模块源代码.py文件没有修改(通过比较两者的时间戳),则直接导入.pyc文件,从而提高程序效率
- 按字节编译的.pyc文件是在导入模块时,python解释器自动完成,无需手动编译。
包与模块的打包发布
1. 包是Python Python 引入的分层次文件目录结构,它定义了一个由 模块及子包,和下的 等组成Python Python 的应用环境。 引入了包以后,只要顶层的名不与别人冲突那所有模块都不会与别人冲突。
2. 每一个 Python Python 的包目录下面都会有名为 init.py init.py init.py init.py__init__.py init.py的特殊文件, 该文件 可以为空文件,但是必须存在 ,它表明这个目录不是 普通的目录结构,而是一个包里面含模块。
模块的打包发布
用户可将自己编写的模块打包为可安装的压缩包,分享给其他人。
将待发布的包放在与setup.py文件同级的目录中,目录结构如下所示:
编辑setup.py脚本文件,setup.py文件中包含的内容如下:
其中的setupカ一个函数,包含5个参数,依次カ:包名、版本号、描述信息、作者以及包中含有的模抉,实际上setup函数中不只有这些参数,但这些参数也不是必需的,用户可有选择地迸行设置。
在当前路径下打开命令行窗口,使用bulid命令构建模块,示例如下:
python setup.py build
经此操作后,当前目录中会创建一个名为build的文件夹, 其中包含一个名为lib的目录, 该目录中存储了待发布模块的备份。build文件夹中的目录结构如下所示:
用户可通过sdist命令建立存放文件,示例如下: