一、 模块
1、定义:
- 模块说白了就是工具包,要想使用这个工具包中的工具(就好比函数),就需要导入这个模块
- 模块是非常简单的Python文件,单个Python文件就是一个模块,两个文件就是两个模块。
如:
2、如何导入模块:
**模块导入方式1:import 模块名1,模块名2和import 模块名.函数名
场景一:必须加上模块调用的原因
因为可能存在这样一种情况:在多个模块中含有相同名称的函数, 如果只是通过函数名来调用,解释器无法知道到底要调用哪个函数。
所以如果像上述这样引入模块的时候,调用函数必须加上模块名。
**模块导入方式2:from 模块名 import 函数名/变量名
**模块导入方式3:import 长模块名 as 短模块名和from 模块名import 长函数名 as 短函数名
场景3:如果导入的模块名/函数名/变量名过长时
如:import numpy as np
import os.path as pth
**模块导入方式4:from 模块名 import*
场景3:把一个模块的所有内容全都导入
这提供了一个简单的方法来导入一个模块中的所有项目。然而这种声明不该被过多地使用。
例如:
import random
import time
import functools
from random import randint as rint
特殊:模块中的 __all__有什么作用?
答:如果一个文件中有all变量,那么也就意味着这个变量中的元素,不会被from xxx import *时导入。
也就是:导入所有信息时, 判断模块中是否有__all__属性, 没有的话, 所有信息均可导入。 有的话,只有__all__列表里面指定的变量可以导入.
3、第三方模块:
(不是python官方提供的模块,需要通过工具安装)
第三方模块安装方式:
1) pip install 模块名
2)pip install -i https://pypi.douban.com/simple 模块名
3) 在pycharm的解释器环境中添加并实现安装
例如 :
import requests
import numpy as np
import matplotlib.pyplot as plt
4、自定义模块:
将自己写的.py文件封装成一个模块,则可以导入使用。
例如:
# 封装一个模块
name = '浅浅'
password = '1314'
def login():
print('login.....')
def register():
print('register.....')
if __name__ == '__main__':
print('正在调用website模块......')
# print(__file__) #打印文件的绝对路径
# print(__doc__) #打印模块的帮助文档
#导入上面的自定义模块
import website
website.login()
website.register()
可以看到,在导入自定义模块的时候,可以使用模块里的函数和变量
导入模块的过程,实质是执行模块内容的过程:
如整体调用后,结果如下:
# 封装一个模块
name = '浅浅'
password = '1314'
def login():
print('login.....')
def register():
print('register.....')
if __name__ == '__main__':
print('正在调用website模块......')
#导入上面的自定义模块
import website
website.login()
website.register()
运行结果:
可以看到,先执行了模块的内容,然后调用模块的login()和register()函数
然而有时候我们并不想要模块执行的结果,只想调用这个模块,那么可以:
___ main___ :模块的作用
- 如果当作模块导入时, 结果为模块名称, 这里是website
- 如果不是当作模块导入,结果为 ___ main___
所以:
- 如果被当作模块导入时,不满足 if 语句,所以就不执行函数
- 所以,我们在通常写代码调用函数时,最好加上这句if语句
二、包
1、 定义


注意:模块导入时:其实是在执行模块的内容,即运行一遍程序
就是一个普通目录,多了个初始化文件:__init__.py
导入包的时候其实就是在执行这个初始化文件
import * 理论上是希望文件系统找出包中所有的子模块,然后导入它们。 But 会花长时间,并出现边界效应等。Python 解决方案是提供一个明确的包索引。 这个索引由 __ init __.py 定义 __ all __ 变量,该变量为一列表, 只会导入指定的内容
三、模块制作与发布
1、制作:
每个Python文件都可以作为一个模块,模块的名字就是文件的名字,所以python文件起名字最好起英文。
在实际工作中,当一个开发人员编写完一个模块后,为了让模块能够在项目中达到想要的效 果,这个开发人员会自行在py文件中添加一些测试信息。
为了避免这些测试信息在模块调用时执行,就需要使用 if __ name ==’ main __’: 语句
2、发布:
(1)为模块文件创建一个文件夹,并将模块文件复制到这个文件中(一般,文件夹的名字和模块的名字一样)
mkdir verifycode
mv verifycode.py verifycode
(2)在文件夹中创建一个名为 setup.py 的文件,内容如下:
from distutils.core import setup
setup(
name='verifycode', # 模块名称
version='1.0.0', # 版本
author='作者名',
author_email='作者联系邮箱',
description="模块表述",
py_modules=['verifycode'] #这里是模块名,不需要 .py
)
(3)构建模块和发布文件:
python setup.py build
python setup.py sdist
进行解包
将发布安装到你的Python本地副本中:
python setup.py install
(4) pypi发布:(需要注册)
注册PyPI网站 http://pypi.python.org
向PyPI上传代码
python setup.py register
python setup.py sdist upload
四、 模块安装与使用
即:源码安装
- 找到模块的压缩包
- 解压
- 进入文件夹
- 执行命令sudo python setup.py install
这里具体饰演过程后面会进行更新。