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:Python3libsite-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:UsersAdministratorAppDataRoaming

目录 Roaming 用来存放软件的配置文件。

2. 创建目录 pip

mkdir pip

3. 创建文件 pippip.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:python3libsite-packages
Requirement already up-to-date: certifi>=2017.4.17 in c:python3libsite-pac
kages (from requests)
Requirement already up-to-date: idna<3,>=2.5 in c:python3libsite-packages
(from requests)
Requirement already up-to-date: chardet<4,>=3.0.2 in c:python3libsite-pack
ages (from requests)
Requirement already up-to-date: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in d:ad
donpy36libsite-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:python3libsite-packagesrequests-2.23.0.dist-infoinstaller
  c:python3libsite-packagesrequests-2.23.0.dist-infolicense
  c:python3libsite-packagesrequests-2.23.0.dist-infometadata
  c:python3libsite-packagesrequests-2.23.0.dist-inforecord
  c:python3libsite-packagesrequests-2.23.0.dist-infotop_level.txt
  c:python3libsite-packagesrequests-2.23.0.dist-infowheel
  c:python3libsite-packagesrequests__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:python3libsite-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>rn<!--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 用于照相机、图像处理、特征提取、格式转换