二十四、模块、if__name__=="__main__":、包、__init__.py的作用、模块的发布安装
一、模块的介绍(必须导入import 模块名)
1、random模块:
用于生成一个指定范围内的整数。其中参数a是下限,参数b是上限,生成的随机数n: a <= n <= b
需要导入这个模块才可以使用这个函数:
2、os模块
__file__ 是用来获得模块所在的路径的
二、在python3安装pygame模块:
sudo pip3 install pygame (在python2 中 : sudo pip install pygame)
import pygame ——导入包,没有出现错误就安装成功
三、模块初识
例如:
1、创建个模块文件 sendmsg.py 写个方法
2、再创建个模块文件 main.py
3、如果sendmsg.py 有多个文件, test1 test2
① 可分开导入:
② 合在一起导入(用的多)
③ *代表导入所有的模块,但如果模块中有相同的方法名, 容易混乱,建议少用*这个方法
4、如果是类里的方法:
5、有路径的话,例如aa文件夹下有个bb文件夹,bb文件夹下有个sendmsg方法
6、使用as起个别名(换个名字)
7、注意
注意:不要起的名字跟系统模块名字一样的。
优势:特别适合于共同开发:自己写自己的模块,并自己测试。
8、if__name__=="__main__":
① 当你导入一个模块的时候,会把这个模块的从头到尾的功能,都执行一遍。
② __name__这个东西:自己调用的时候就是__main__,别人去调用的时候显示的是当前模块的文件名字。
③ 在模块文件中可添加上 if__name__=="__main__":
方便自己调试用的,又不影响别人调用
只有自己调用时,才执行缩进的命令,用import导入时,不会执行缩进的内容,可大胆方便调试
四、(了解即可)__all__ 的作用
__all__是一个字符串list,用来定义模块中对于from XXX import *时要对外导出的方法和属性,即要暴露的接口,但它只对import *起作用,对from XXX import XXX不起作用。
总结:这样可以防止别人导入不需要的模块。
五、包、__init__.py的作用
要想把所有的模块文件放入文件夹中,必须在文件夹里创建__init__.py这个文件,才能打成包,且文件必须编辑。
1、一个文件夹想要变成包:需要有__init__.py文件;
2、只要导入了一个包,这个包里面的__init__.py会自动的执行;
3、在__init__.py文件中万能的导法:from . import xxx, xxxx, xxxxx (其中xxx代表模块文件)
六、模块的发布、安装
想在任何一个地方进行导入都是可以的。
(1)发布
1、把模块文件放到一个文件夹包(里面包含模块文件和__init__.py文件) —在这里给文件包取名TestMsg(自己随意定义的名,不固定)
2、创建一个setup.py文件,与TestMsg在一个目录下
setup.py文件写的固定代码如下: 里面的汉字自己定义
from distutils.core import setup
setup(name="模块名称", version="版本(自己定义例如1.0)", description="模块描述", author="模块作者", py_modules=
['TestMsg.sendmsg', 'TestMsg.recvmsg'(此处主要是包含的模块内容, 格式'文件名.模块文件')])
3、构建模块:输入命令,自己选择版本
python2 setup.py build 发布python2版本的命令
python3 setup.py build 发布python3版本的命令
4、生成发布压缩包 (自己选择版本输入)
python2 setup.py sdist
python3 setup.py sdist
(2)解压、安装
1、要想使用,解压
例如 模块压缩包名 : Pytest-1.0.tar.gz (定义的模块名称-版本)
例如下载安装包解压: tar -zxvf Pytest-1.0.tar.gz
可查看PKG-INFO 文件,里面是定义的一些信息
2、安装到python3 中有两种方法:
① sudo python3 setup.py install
② pip install 模块的名
(3)删除安装的模块
① 可先查看 : pip3 list ——(在linux中可用) 例如查看出 Pytest(1.0) 文件
② 删除: sudo pip3 uninstall Pytest
七、常见模块
常用标准库:
常用扩展库: