Python 中的常用第三方模块
Python 有丰富且易用的第三方模块,使用第三方模块省去了大量开发时间。本节介绍了 Python 的包管理工具 pip,讲解了使用 pip 下载、安装、卸载第三方模块的方法,最后介绍了常用的第三方 Python 模块。
1. 第三方模块简介
Python 的标准库是随着 Pyhon 安装的时候默认自带的库,提供了有文本处理、系统管理、网络处理等功能。Python 的第三方库,是由各家厂商和 Python 爱好者开发的库,第三方库需要下载后安装到 Python 的安装目录下。
有一句话:“人生苦短,我用Python”。使用 Python 可以节省开发时间,原因在于: Python 有丰富且易用的第三方模块。使用第三方模块省去了大量重复造轮子的时间,节约了众多开发者的生命。所以现如今Python这么火,大行其道,也是有其原因的。
网站 https://pypi.org 汇聚了所有的第三方模块的信息,通过该网站可以查找和下载第三方模块,输入第三方模块的名字可以查询到该模块的信息,如下图所示:
2. pip 简介
2.1 pip 简介
pip 是 Python 包管理工具,该工具提供了对Python 包的查找、下载、安装、卸载的功能。
Python 3.4+ 以上版本自带 pip 工具,如果在 python.org 下载最新版本的安装包,则已经自带了该工具。使用命令 pip --version 检查是否已经安装了 pip,如下所示:
C:\> pip --version
pip 9.0.1 from C:\Python3\lib\site-packages (python 3.6)
2.2 pip 和 pip3
存在有两个主要的 Python 版本:Python2 和 Python3,这两个版本的语法和库不完全兼容,对应有 2 个包管理工具:pip 和 pip3,它们的区别如下:
- 如果系统中同时安装了 Python2 和 Python3,则 pip 用于安装 Python2 的模块,pip3 用于安装 Python3 的模块;
- 如果系统中只安装了 Python2,那么就只能使用 pip;
- 如果系统中只安装了 Python3,那么既可以使用 pip 也可以使用 pip3,二者是等价的。
在 Linux 系统中,默认安装有 Python2,安装完 Python3 以后,系统中就存在两个版本的 Python,因此,最好明确使用 pip3 指定安装 Python3 的模块。
2.3 更换 pip 的源
pip 工具会从网站自动下载 Python 的第三方模块,提供下载 Python 第三方模块的网站被称为源。默认情况下,pip 从国外网站下载 Python 的第三方模块,速度非常的慢。为了加快下载速度,可以将 pip 的源改为国内的镜像源。
国内常用的源如下:
2.4 在 Linux 下更换源
在 Linux 下更换源的步骤如下:
1. 在用户主目录下创建 .pip 目录
mkdir ~/.pip
2. 创建 ~/.pip/pip.conf
[global]
index-url = https://mirrors.aliyun.com/pypi/simple
2.5 在 Windows 下更换源
在 Windows 下更换源的步骤如下:
1. 进入目录 Roaming
cd C:\Users\Administrator\AppData\Roaming
目录 Roaming 用来存放软件的配置文件。
2. 创建目录 pip
mkdir pip
3. 创建文件 pip\pip.ini
[global]
index-url = https://mirrors.aliyun.com/pypi/simple
3. pip3 的使用
3.1 pip3 list
命令 pip3 list 列出所有已经安装的包,示例如下:
C:\> pip3 list
certifi (2020.4.5.1)
chardet (3.0.4)
idna (2.9)
numpy (1.18.4)
pip3 (9.0.1)
pygame (1.9.4)
requests (2.23.0)
setuptools (28.8.0)
urllib3 (1.25.9)
pip3 list 输出了已经安装的包的名称和版本。
3.2 pip3 search package-name
命令 pip3 search package-name 在 pypi.org 上根据 package-name 搜索第三方包。
输出所有包含有关键字 requests 的第三方模块,并给出模块的功能简介,示例如下:
C:\> pip3 search requests
requests-auth (5.1.0) - Authentication for Requests
pydantic-requests (0.1.3) - A pydantic integration with requests.
Requests-OpenTracing (0.2.0) - OpenTracing support for Requests
yamlsettings-requests (1.0.0) - YamlSettings Request Extension
requests-aws4auth (0.9) - AWS4 authentication for Requests
pycopy-requests (0.0.0) - Dummy requests module for Pycopy
jupyter-requests (0.0.3) - Send requests to a Jupyter server.
requests-middleware (0.1.2) - Composable HTTP middleware for requests
...
3.3 pip3 install package-name
命令 pip3 install package-name 安装名称为 package-name 的第三方模块。命令 pip install 从网站 pypi.org 下载指定名称的第三方模块然后自动安装,非常方便。
安装名为 django 的第三方模块,示例如下:
C:\>pip3 install django
Collecting django
Downloading https://files.pythonhosted.org/packages/9d/04/04abb097c84c770180ee
ebe7ed920ce42f9917ab5ad4de01ff8ed11bc25b/Django-3.0.6-py3-none-any.whl (7.5MB)
34% |███████████▏ | 2.6MB 144kB/s eta 0:00:34
34% |███████████▏ | 2.6MB 108kB/s eta 0:00:45
35% |███████████▏ | 2.6MB 108kB/s eta 0:00:45
...
3.4 pip3 install --upgrade package-name
命令 pip3 install --upgrade package-name 升级名称为 package-name 的第三方模块。命令 从网站 pypi.org 下载指定名称的第三方模块的最新版本,然后自动安装升级。
升级名为 requests 的第三方模块,示例如下:
C:\>pip3 install --upgrade requests
Requirement already up-to-date: requests in c:\python3\lib\site-packages
Requirement already up-to-date: certifi>=2017.4.17 in c:\python3\lib\site-pac
kages (from requests)
Requirement already up-to-date: idna<3,>=2.5 in c:\python3\lib\site-packages
(from requests)
Requirement already up-to-date: chardet<4,>=3.0.2 in c:\python3\lib\site-pack
ages (from requests)
Requirement already up-to-date: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in d:\ad
don\py36\lib\site-packages (from requests)
3.5 pip3 uninstall package-name
命令 pip3 uninstall package-name 卸载名称为 package-name 的第三方模块。卸载 requests 模块,示例如下:
C:\>pip3 uninstall requests
Uninstalling requests-2.23.0:
c:\python3\lib\site-packages\requests-2.23.0.dist-info\installer
c:\python3\lib\site-packages\requests-2.23.0.dist-info\license
c:\python3\lib\site-packages\requests-2.23.0.dist-info\metadata
c:\python3\lib\site-packages\requests-2.23.0.dist-info\record
c:\python3\lib\site-packages\requests-2.23.0.dist-info\top_level.txt
c:\python3\lib\site-packages\requests-2.23.0.dist-info\wheel
c:\python3\lib\site-packages\requests\__init__.py
...
Proceed (y/n)? y
Successfully uninstalled requests-2.23.0
卸载 requests 模块时,首先列出该模块相关的文件,在删除这些文件前,程序要求用户输入 y 进行确认。用户输入 y 后,pip3 就会卸载该模块。
3.6 pip3 show package-name
命令 pip3 show package-name 显示名称为 package-name 的第三方模块的信息,示例如下:
C:\> pip3 show requests
Name: requests
Version: 2.23.0
Summary: Python HTTP for Humans.
Home-page: https://requests.readthedocs.io
Author: Kenneth Reitz
Author-email: me@kennethreitz.org
License: Apache 2.0
Location: c:\python3\lib\site-packages
Requires: chardet, idna, certifi, urllib3
在以上信息中,requires 列出 requests 模块的依赖的模块:chardet、idna、certifi、urllib3,当安装 requests 模块时,会自动安装这 4 个模块。
4. 常用的第三方模块
4.1 requests 模块
requests 是一个的简单易用的 http 库,发出 http 请求并获取响应,可以用于抓取网站的页面。
使用 requests.get(url) 方法抓取 baidu 的首页,示例如下:
>>> import requests
>>> response = requests.get('https://www.baidu.com')
>>> response.text
'<!DOCTYPE html>\r\n<!--STATUS OK--><html> <head><meta http-equiv=content-type c
ontent=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge>
<meta content=always name=referrer>
...
- 在第 2 行,使用 requests.get(‘https://www.baidu.com’) 获取 baidu 首页
- 在第 3 行,response.text 是 baidu 首页 html 文件的内容
4.2 numpy 模块
NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。NumPy 是一个运行速度非常快的数学库,主要用于科学计算,包含:
- 一个强大的 N 维数组对象 ndarray
- 统计函数
- 线性代数、傅里叶变换、随机数生成
- 矩阵运算
numpy 提供了从数组中查找最小元素,最大元素的功能,示例如下:
>>> import numpy
>>> a = numpy.array([[1,2,3],[4,5,6],[7,8,9]])
>>> numpy.amin(a)
1
>>> numpy.amax(a)
9
- 在第 2 行,创建一个二维数组
- 在第 3 行,函数 amin(a) 返回数组的最小元素
- 在第 5 行,函数 amax(a) 返回数组的最小元素
4.3 pygame 模块
Pygame 是一组用来开发游戏软件的 Python 程序模块,基于 SDL 库的基础上开发。允许你在 Python 程序中创建功能丰富的游戏和多媒体程序,Pygame 是一个高可移植性的模块,可以支持多个操作系统,使用 Pygame 开发的程序可以运行在 windows、linux 和 mac os 上。
使用 pygame 开发了一个围棋的游戏,如下图所示:
4.4 pymysql 模块
pymysql 模块提供了访问 mysql 数据库的功能,包括:
- 获取与数据库的连接
- 执行 SQL 语句并获取执行结果
- 关闭数据库连接
假设存在数据库 QA,查询表 users 的示例如下:
import pymysql
conn = pymysql.connect(host="localhost", user="root", passwd="", db='QA')
cursor = conn.cursor()
cursor.execute("SELECT userId,password FROM users");
rows = cursor.fetchall()
for row in rows:
print(row[0], row[1])
cursor.close()
conn.close()
- 在第 3 行,连接数据库 QA
- 在第 6 行,执行 SQL 语句 SELECT userId,password FROM users
- 在第 7 行,函数 fetchall() 返回 SQL 语句的查询结果
程序输出如下:
张三 ZhangSan
李四 LiSi
王五 WangWu
4.5 其它常用的模块
模块名 | 功能 |
---|---|
urllib3 | Python HTTP库,安全连接池、支持文件post |
RoboBrowser | 无需独立的浏览器即可浏览网页 |
MechanicalSoup | 一个与网站自动交互 Python 库 |
mechanize | 有状态、可编程的 Web 浏览库 |
hyper | Python的HTTP/2客户端 |
grab | 网络爬虫框架(基于pycurl/multicur) |
scrapy | 网络爬虫框架(基于twisted)架 |
selenium | 用于Web应用程序测试的工具 |
jieba | 中文分词工具 |
OpenCV | 开源计算机视觉库 |
SimpleCV | 用于照相机、图像处理、特征提取、格式转换 |