Python 生态最让人又爱又怕的一点是:同一个问题往往有五六个成熟的库。本附录不替你决定技术栈,只回答两个问题——「这个库是干什么的」与「什么场景下该选它」,并标出本书对应章节。
表中版本号在写作时通过 PyPI 官方接口实测取得,仅作参考:生态更新很快,请以你安装当天的版本为准。备注 列写的是选型判断依据,不是排名。
附录 C 常用第三方库与资源
包管理与环境
| 库 | 用途 | 本书 | 实测版本 |
|---|---|---|---|
pip | 官方包安装器 | 2.1 | 26.2.1 |
venv | 标准库自带的虚拟环境 | 2.1 | 标准库 |
uv | Rust 编写的极快包 / 环境管理器 | 15.1 | 0.12.24 |
pipx | 把 CLI 工具装进隔离环境 | 2.1 | 1.17.12 |
poetry | 依赖解析 + 打包一体化 | 15.1 | 2.5.1 |
pdm | 遵循 PEP 582 / 锁文件的工作流 | 15.3 | 2.29.2 |
virtualenv | venv 的增强替代 | 2.1 | 21.14.6 |
选型判断:只想装包就用 pip;想要极致速度与锁文件用 uv;需要一套完整发布流水线用 poetry。 三者不互斥,很多团队用 uv 装依赖、用 build 出包。
代码质量
| 库 | 用途 | 本书 | 实测版本 |
|---|---|---|---|
ruff | 极快的 lint + 格式化,可替代多款工具 | 14.3 | 0.16.10 |
black | 无配置的意见化格式化器 | 14.3 | 26.10.0 |
mypy | 静态类型检查器(参考实现) | 9.1 | 2.4.0 |
pyright | 微软的类型检查器,速度更快 | 9.1 | 1.1.414 |
pylint | 老牌全功能 lint | 14.3 | 4.1.2 |
isort | 导入语句排序 | 14.3 | 9.0.2 |
bandit | 安全漏洞扫描 | 14.3 | 1.9.4 |
关键区分:类型检查(mypy / pyright)与 lint(ruff / pylint)是两件事,前者管类型正确性,后者管风格与潜在缺陷,CI 里应各跑一次。新项目直接用 ruff 取代 flake8 + isort + black 的组合,一个工具一条命令。
测试
| 库 | 用途 | 本书 | 实测版本 |
|---|---|---|---|
pytest | 事实标准测试框架 | 14.1 | 9.1.1 |
pytest-cov | 覆盖率统计 | 14.3 | 7.1.0 |
pytest-xdist | 并行执行测试 | 14.3 | 3.8.0 |
hypothesis | 基于属性的测试,自动造用例 | 14.2 | 6.168.5 |
coverage | 底层覆盖率引擎 | 14.3 | 7.16.2 |
faker | 生成假数据 | 14.2 | 40.41.0 |
freezegun | 冻结时间便于测试 | 14.2 | 1.5.5 |
responses / respx | 拦截 HTTP 请求返回桩数据 | 14.2 | 0.26.3 / 0.23.1 |
选型判断:pytest 几乎是默认答案,unittest 只在需要零依赖或对接既有测试集时用。hypothesis 的价值在于「你想不到的边界」——手写用例永远覆盖不全。
Web 与 API
| 库 | 用途 | 本书 | 实测版本 |
|---|---|---|---|
fastapi | 带类型校验的现代 API 框架 | 16.2 | 0.143.0 |
uvicorn | ASGI 服务器 | 16.2 | 0.54.0 |
starlette | 轻量 ASGI 框架(FastAPI 底座) | 16.1 | 1.7.0 |
flask | 极简 WSGI 框架 | 16.1 | 3.1.3 |
django | 全栈框架,自带 ORM 与后台 | 16.1 | 6.1.2 |
litestar | 性能优先的 ASGI 框架 | 16.1 | 2.24.0 |
gunicorn | WSGI 进程管理器 | 16.1 | 26.2.0 |
httpx | 支持同步 / 异步的 HTTP 客户端 | 12.3 | 0.28.1 |
requests | 最流行的同步 HTTP 客户端 | 12.3 | 2.34.2 |
选型判断:API 服务优先 fastapi(类型驱动、自动文档);需要完整后台与自带 ORM 选 django;只要一层薄路由用 flask。 客户端里 requests 简单够用,一旦要并发或异步就换 httpx。
数据库与 ORM
| 库 | 用途 | 本书 | 实测版本 |
|---|---|---|---|
sqlalchemy | 事实标准的 ORM 与 SQL 工具包 | 16.3 | 2.1.4 |
alembic | 数据库迁移(配合 SQLAlchemy) | 16.3 | 1.20.0 |
psycopg | PostgreSQL 驱动(3.x 版) | 16.3 | 3.3.6 |
asyncpg | PostgreSQL 异步驱动,速度优先 | 16.3 | 0.32.0 |
redis | Redis 客户端 | 16.3 | 8.1.0 |
pymongo | MongoDB 官方驱动 | — | 4.18.3 |
选型判断:要 ORM 又要能写裸 SQL,选 SQLAlchemy;只操作 Redis / Mongo 这类非关系库,直接用官方驱动即可,不必套 ORM。
数据处理
| 库 | 用途 | 本书 | 实测版本 |
|---|---|---|---|
pandas | 表格数据分析的老牌选择 | 17.3 | 3.0.6 |
polars | Rust 编写、惰性求值的列式引擎 | 17.3 | 2.0.0 |
numpy | 多维数组与数值计算底座 | 17.3 | 2.5.3 |
pyarrow | 列式内存格式与 Parquet 读写 | 17.3 | 25.0.1 |
duckdb | 进程内 OLAP 数据库,可直接查 Parquet | 17.3 | 1.5.6 |
选型判断:生态与教程最多的是 pandas;数据量大、追求吞吐与内存效率选 polars;介于两者之间的分析型查询交给 duckdb。 三者都建立在 numpy 之上,pyarrow 是它们交换数据的公共格式。
网络与爬虫
| 库 | 用途 | 本书 | 实测版本 |
|---|---|---|---|
beautifulsoup4 | HTML / XML 解析,容错性强 | 17.2 | 4.15.0 |
lxml | 高性能 XML / HTML 解析 | 17.2 | 6.1.3 |
scrapy | 完整爬虫框架(调度、去重、管道) | 17.2 | 2.19.0 |
selenium | 驱动真实浏览器 | 17.2 | 4.50.0 |
playwright | 现代浏览器自动化,自带等待 | 17.2 | 1.63.0 |
aiohttp | 异步 HTTP 客户端 / 服务端 | 13.3 | 3.14.4 |
选型判断:静态页面用 requests + beautifulsoup4 足够;需要 JavaScript 渲染才上 playwright / selenium;大规模抓取才值得引入 scrapy。 任何爬虫都要先确认目标站点的 robots 与条款,见 17.2
。
命令行与终端
| 库 | 用途 | 本书 | 实测版本 |
|---|---|---|---|
typer | 基于类型注解构建 CLI | 11.3 | 0.27.3 |
click | 组合式 CLI 框架(Typer 底座) | 11.3 | 8.5.0 |
rich | 终端富文本、表格、进度条 | 11.3 | 15.0.0 |
tqdm | 一行代码加进度条 | 17.1 | 4.70.1 |
questionary | 交互式提示(选择、确认) | 11.3 | 2.1.1 |
选型判断:简单参数用标准库 argparse;要好看、要子命令、要类型驱动就用 typer。 进度反馈用 tqdm,复杂终端 UI 用 rich。
序列化与配置
| 库 | 用途 | 本书 | 实测版本 |
|---|---|---|---|
pydantic | 数据校验与设置管理 | 9.3 | 2.14.0 |
pydantic-settings | 从环境变量加载配置 | 9.3 | 2.15.0 |
orjson | 极快的 JSON 库 | 10.3 | 3.13.0 |
msgspec | 高性能序列化 + 校验 | 10.3 | 0.22.0 |
pyyaml | YAML 读写 | 10.3 | 6.0.3 |
tomli-w | TOML 写入(标准库只读) | 10.3 | 1.2.0 |
python-dotenv | 加载 .env 文件 | 9.3 | 1.2.4 |
选型判断:配置校验首选 pydantic,它与 FastAPI 天然一体。序列化上,json 标准库够用,只有在性能敏感(大响应、高频调用)时才换 orjson / msgspec。
任务队列与调度
| 库 | 用途 | 本书 | 实测版本 |
|---|---|---|---|
celery | 分布式任务队列,功能最全 | 18.3 | 5.6.3 |
rq | 基于 Redis 的轻量任务队列 | 18.3 | 2.12.0 |
dramatiq | 简洁的任务队列,中间件可插拔 | 18.3 | 2.2.1 |
apscheduler | 进程内定时任务调度 | 18.3 | 3.11.3 |
选型判断:任务量小、只要定时执行用 apscheduler;需要跨机器分发与重试用 celery;想少配置用 rq。 引入队列意味着同时引入消息中间件与运维成本,别为单机任务上这套。
可观测性
| 库 | 用途 | 本书 | 实测版本 |
|---|---|---|---|
structlog | 结构化日志 | 11.2 | 26.1.0 |
loguru | 开箱即用的日志体验 | 11.2 | 0.7.3 |
opentelemetry-api | 分布式追踪与指标标准 | 11.2 | 1.45.1 |
sentry-sdk | 异常采集与告警 | 11.2 | 2.71.0 |
prometheus-client | 暴露指标供抓取 | 11.2 | 0.26.0 |
选型判断:标准库 logging 已经够用,需要机器可读的结构化输出再用 structlog;只想少写配置就用 loguru。生产环境的错误聚合交给 sentry-sdk,指标交给 prometheus-client。
科学计算与机器学习
| 库 | 用途 | 本书 | 实测版本 |
|---|---|---|---|
scipy | 科学计算算法库 | 17.3 | 1.18.1 |
scikit-learn | 经典机器学习算法 | 17.3 | 1.9.1 |
torch | 深度学习框架(PyTorch) | — | 2.14.1 |
tensorflow | 深度学习框架(TF) | — | 2.21.0 |
matplotlib | 基础绘图库 | 17.3 | 3.11.2 |
seaborn | 基于 matplotlib 的统计可视化 | 17.3 | 0.13.2 |
jupyterlab | 交互式笔记本环境 | 17.3 | 4.6.4 |
选型判断:经典机器学习(特征工程 + 树模型 / 线性模型)用 scikit-learn;深度神经网络在 torch 与 tensorflow 之间选——研究社区更偏前者。 画图先用 matplotlib 打底,统计图再上 seaborn。
桌面、图像与办公
| 库 | 用途 | 本书 | 实测版本 |
|---|---|---|---|
pillow | 图像打开、转换、缩放 | 17.1 | 12.3.0 |
openpyxl | 读写 Excel .xlsx | 17.1 | 3.1.5 |
pyautogui | 模拟鼠标键盘 | 17.1 | 0.9.54 |
pyqt6 | Qt 桌面 GUI(GPL / 商业) | — | 6.11.0 |
pyside6 | Qt 官方 Python 绑定(LGPL) | — | 6.12.0 |
opencv-python | 计算机视觉与图像处理 | — | 5.0.0.93 |
选型判断:图像批处理用 pillow;桌面 GUI 想省心授权用 pyside6,想用最新特性用 pyqt6;计算机视觉上 opencv-python。 本书的办公自动化场景见 17.1
。
打包与发布
| 库 | 用途 | 本书 | 实测版本 |
|---|---|---|---|
build | 按 PEP 517 构建发行包 | 15.2 | 1.6.1 |
twine | 上传包到 PyPI | 15.2 | 7.0.0 |
hatchling | 现代构建后端 | 15.2 | 1.32.4 |
setuptools | 传统构建后端 | 15.2 | 84.0.0 |
cibuildwheel | 在 CI 里构建多平台 wheel | 15.3 | 4.3.0 |
pyinstaller | 打包成单文件可执行程序 | 15.2 | 6.22.3 |
nuitka | 把 Python 编译成 C,产物更小更快 | 15.2 | 4.2.2 |
选型判断:发布到 PyPI 用 build + twine,构建后端新项目选 hatchling;要发二进制可执行文件,pyinstaller 上手快,nuitka 产物体积与启动速度更优但构建更慢。 完整流程见 15.2
。
学习资源
资源按用途分四类,比按形式分更有用:
| 资源类型 | 具体去处 | 什么时候用 |
|---|---|---|
| 官方文档 | docs.python.org/3/ 的标准库与语言参考 | 查某个 API 的确切行为与边界 |
| 版本说明 | docs.python.org/3/whatsnew/ 的 What’s New | 升级前确认破坏性变更与新特性 |
| 设计依据 | PEP 索引 peps.python.org | 想知道「为什么这样设计」时读原始提案 |
| 风格规范 | PEP 8 风格指南、PEP 257 文档字符串 | 团队协作前统一写法 |
| 下载安装 | python.org/downloads/ | 获取各平台安装包与版本历史 |
| 社区问答 | Stack Overflow、r/learnpython、官方 Discourse | 具体报错与踩坑,搜关键词往往已有答案 |
使用建议:官方文档当字典查,PEP 当设计文档读,What’s New 当升级清单用,社区问答当排错入口。 尤其不要只靠碎片化教程学语言——标准库参考才是权威。
一个常见误区是把「教程」和「参考」混用:教程告诉你「怎么起步」,参考告诉你「这个参数到底接受什么」。查 API 一律以官方参考为准。
小结
- 第三方库的选型没有普适最优解,判断依据是「部署环境、团队规模、性能要求」这三件事,而不是「哪个 star 多」。
- 装依赖、做类型检查、跑测试、发包这四件事,每个类别都已形成事实标准,跟随主流比自创方案省心。
- 类型检查(
mypy/pyright)与 lint(ruff)职责不同,CI 里必须各跑一次,缺一不可。 - 序列化与配置以
pydantic为核心;只在性能敏感处才替换标准库的json。 - 学习资源要按用途分工:官方文档当字典、PEP 当设计文档、What’s New 当升级清单、社区问答当排错入口。
- 引入任何第三方库前先问一句:标准库(见附录 B)能不能直接干这件事?
继续阅读
探索更多技术文章
浏览归档,发现更多关于系统设计、工具链和工程实践的内容。