Python 中的常用第三方模塊
Python 有豐富且易用的第三方模塊,使用第三方模塊省去了大量開發(fā)時間。本節(jié)介紹了 Python 的包管理工具 pip,講解了使用 pip 下載、安裝、卸載第三方模塊的方法,最后介紹了常用的第三方 Python 模塊。
1. 第三方模塊簡介
Python 的標(biāo)準庫是隨著 Pyhon 安裝的時候默認自帶的庫,提供了有文本處理、系統(tǒng)管理、網(wǎng)絡(luò)處理等功能。Python 的第三方庫,是由各家廠商和 Python 愛好者開發(fā)的庫,第三方庫需要下載后安裝到 Python 的安裝目錄下。
有一句話:“人生苦短,我用Python”。使用 Python 可以節(jié)省開發(fā)時間,原因在于: Python 有豐富且易用的第三方模塊。使用第三方模塊省去了大量重復(fù)造輪子的時間,節(jié)約了眾多開發(fā)者的生命。所以現(xiàn)如今Python這么火,大行其道,也是有其原因的。
網(wǎng)站 https://pypi.org 匯聚了所有的第三方模塊的信息,通過該網(wǎng)站可以查找和下載第三方模塊,輸入第三方模塊的名字可以查詢到該模塊的信息,如下圖所示:
2. pip 簡介
2.1 pip 簡介
pip 是 Python 包管理工具,該工具提供了對Python 包的查找、下載、安裝、卸載的功能。
Python 3.4+ 以上版本自帶 pip 工具,如果在 python.org 下載最新版本的安裝包,則已經(jīng)自帶了該工具。使用命令 pip --version 檢查是否已經(jīng)安裝了 pip,如下所示:
C:\> pip --version
pip 9.0.1 from C:\Python3\lib\site-packages (python 3.6)
2.2 pip 和 pip3
存在有兩個主要的 Python 版本:Python2 和 Python3,這兩個版本的語法和庫不完全兼容,對應(yīng)有 2 個包管理工具:pip 和 pip3,它們的區(qū)別如下:
- 如果系統(tǒng)中同時安裝了 Python2 和 Python3,則 pip 用于安裝 Python2 的模塊,pip3 用于安裝 Python3 的模塊;
- 如果系統(tǒng)中只安裝了 Python2,那么就只能使用 pip;
- 如果系統(tǒng)中只安裝了 Python3,那么既可以使用 pip 也可以使用 pip3,二者是等價的。
在 Linux 系統(tǒng)中,默認安裝有 Python2,安裝完 Python3 以后,系統(tǒng)中就存在兩個版本的 Python,因此,最好明確使用 pip3 指定安裝 Python3 的模塊。
2.3 更換 pip 的源
pip 工具會從網(wǎng)站自動下載 Python 的第三方模塊,提供下載 Python 第三方模塊的網(wǎng)站被稱為源。默認情況下,pip 從國外網(wǎng)站下載 Python 的第三方模塊,速度非常的慢。為了加快下載速度,可以將 pip 的源改為國內(nèi)的鏡像源。
國內(nèi)常用的源如下:
源的提供方 | 源的 URL |
---|---|
阿里云 | https://mirrors.aliyun.com/pypi/simple |
清華 | https://pypi.tuna.tsinghua.edu.cn/simple |
中國科技大學(xué) | https://pypi.mirrors.ustc.edu.cn/simple |
華中理工大學(xué) | http://pypi.hustunique.com |
豆瓣 | http://pypi.douban.com/simple |
2.4 在 Linux 下更換源
在 Linux 下更換源的步驟如下:
1. 在用戶主目錄下創(chuàng)建 .pip 目錄
mkdir ~/.pip
2. 創(chuàng)建 ~/.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. 創(chuàng)建目錄 pip
mkdir pip
3. 創(chuàng)建文件 pip\pip.ini
[global]
index-url = https://mirrors.aliyun.com/pypi/simple
3. pip3 的使用
3.1 pip3 list
命令 pip3 list 列出所有已經(jīng)安裝的包,示例如下:
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 輸出了已經(jīng)安裝的包的名稱和版本。
3.2 pip3 search package-name
命令 pip3 search package-name 在 pypi.org 上根據(jù) package-name 搜索第三方包。
輸出所有包含有關(guān)鍵字 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 從網(wǎng)站 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 的第三方模塊。命令 從網(wǎng)站 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 模塊時,首先列出該模塊相關(guān)的文件,在刪除這些文件前,程序要求用戶輸入 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,當(dāng)安裝 requests 模塊時,會自動安裝這 4 個模塊。
4. 常用的第三方模塊
4.1 requests 模塊
requests 是一個的簡單易用的 http 庫,發(fā)出 http 請求并獲取響應(yīng),可以用于抓取網(wǎng)站的頁面。
使用 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 文件的內(nèi)容
4.2 numpy 模塊
NumPy(Numerical Python) 是 Python 語言的一個擴展程序庫,支持大量的維度數(shù)組與矩陣運算,此外也針對數(shù)組運算提供大量的數(shù)學(xué)函數(shù)庫。NumPy 是一個運行速度非??斓臄?shù)學(xué)庫,主要用于科學(xué)計算,包含:
- 一個強大的 N 維數(shù)組對象 ndarray
- 統(tǒng)計函數(shù)
- 線性代數(shù)、傅里葉變換、隨機數(shù)生成
- 矩陣運算
numpy 提供了從數(shù)組中查找最小元素,最大元素的功能,示例如下:
>>> import numpy
>>> a = numpy.array([[1,2,3],[4,5,6],[7,8,9]])
>>> numpy.amin(a)
1
>>> numpy.amax(a)
9
- 在第 2 行,創(chuàng)建一個二維數(shù)組
- 在第 3 行,函數(shù) amin(a) 返回數(shù)組的最小元素
- 在第 5 行,函數(shù) amax(a) 返回數(shù)組的最小元素
4.3 pygame 模塊
Pygame 是一組用來開發(fā)游戲軟件的 Python 程序模塊,基于 SDL 庫的基礎(chǔ)上開發(fā)。允許你在 Python 程序中創(chuàng)建功能豐富的游戲和多媒體程序,Pygame 是一個高可移植性的模塊,可以支持多個操作系統(tǒng),使用 Pygame 開發(fā)的程序可以運行在 windows、linux 和 mac os 上。
使用 pygame 開發(fā)了一個圍棋的游戲,如下圖所示:
4.4 pymysql 模塊
pymysql 模塊提供了訪問 mysql 數(shù)據(jù)庫的功能,包括:
- 獲取與數(shù)據(jù)庫的連接
- 執(zhí)行 SQL 語句并獲取執(zhí)行結(jié)果
- 關(guān)閉數(shù)據(jù)庫連接
假設(shè)存在數(shù)據(jù)庫 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 行,連接數(shù)據(jù)庫 QA
- 在第 6 行,執(zhí)行 SQL 語句 SELECT userId,password FROM users
- 在第 7 行,函數(shù) fetchall() 返回 SQL 語句的查詢結(jié)果
程序輸出如下:
張三 ZhangSan
李四 LiSi
王五 WangWu
4.5 其它常用的模塊
模塊名 | 功能 |
---|---|
urllib3 | Python HTTP庫,安全連接池、支持文件post |
RoboBrowser | 無需獨立的瀏覽器即可瀏覽網(wǎng)頁 |
MechanicalSoup | 一個與網(wǎng)站自動交互 Python 庫 |
mechanize | 有狀態(tài)、可編程的 Web 瀏覽庫 |
hyper | Python的HTTP/2客戶端 |
grab | 網(wǎng)絡(luò)爬蟲框架(基于pycurl/multicur) |
scrapy | 網(wǎng)絡(luò)爬蟲框架(基于twisted)架 |
selenium | 用于Web應(yīng)用程序測試的工具 |
jieba | 中文分詞工具 |
OpenCV | 開源計算機視覺庫 |
SimpleCV | 用于照相機、圖像處理、特征提取、格式轉(zhuǎn)換 |