
坦率地说:我曾经是那个坚持从零开始写每个东西的人。需要 JSON 到 CSV 转换器?“别担心,我来搞定”;想要一个快捷的命令行仪表板?“请给我 30 分钟 + Vim!”
但随着时间的推移,我意识到,虽然编写原始 Python 代码有益于身心健康(是的,的确可以提升自我),但它通常不是最明智的举动——尤其是当其他人已经写了 lib,在 lib 里完成了繁重的工作,测试了边界情况,并将其包装在一个干净的 API 中时。
所以今天,我分解 8 个值得了解的 Python 库。它们不是为了“显得高级”,而是解决开发者经常遇到的真实问题:命令行输出难看、CLI 参数麻烦、日期时间难处理、输入数据不可信、测试数据不好造、大任务没有进度反馈、网页抓取复杂、日志配置冗长。
核心摘要
- 如果你经常写命令行脚本,Rich 和 Typer 能明显改善交互体验和参数处理成本。
- 如果项目里有 API 响应、配置文件或用户输入,Pydantic 可以把类型提示变成可执行的数据校验。
- Faker、tqdm、Loguru 分别解决测试数据、任务进度和日志记录这三类高频小问题。
- Requests-HTML 适合需要 JavaScript 渲染的网页抓取场景,但生产爬虫仍要注意目标站点规则和稳定性。
- 这些库适合“知道有这么个工具,遇到对应问题时少造轮子”,不意味着每个项目都必须引入。
8 个 Python 库适合解决什么问题
| 库 | 主要用途 | 适合场景 |
|---|---|---|
| Rich | 美化终端输出 | CLI 工具、调试脚本、人工阅读输出 |
| Typer | 快速构建 CLI | 参数解析、帮助信息、命令行入口 |
| Pendulum | 日期时间处理 | 时区、时间偏移、可读时间表达 |
| Pydantic | 数据验证和解析 | API 响应、配置、输入数据 |
| Faker | 生成虚拟数据 | 测试、模拟用户、开发数据库 |
| tqdm | 进度条 | 循环、批处理、下载任务 |
| Requests-HTML | 网页抓取 | 需要解析或渲染页面的抓取任务 |
| Loguru | 日志记录 | 脚本、服务、调试和日志轮转 |
1. Rich — 因为 CLI ≠ Ugly
还记得您的命令行输出看起来像在 Windows 95 中设置样式的日子吗?Rich 可以用更友好的方式解决这个问题。它适合把表格、颜色、进度、Markdown 风格文本等内容输出到终端,让人更容易读懂脚本结果。

巴辉特插一嘴:如果只是作为脚本,各种炫酷的着色挺好的,更易于人类阅读。但如果是常驻进程的日志,最佳实践就是不要打印这些乱七八糟的颜色了,而且尽量把日志打印成结构化内容,比如 JSON 格式的日志,更易于各类可观测性系统处理。
2. Typer — 构建 CLI 的最快方法
命令行工具经常要处理参数、HELP 信息,Typer 是必须要了解一下的,非常实用。它的好处是用类型提示定义参数,再自动生成命令行解析和帮助信息。比如下面的脚本:
import typer
def main(name: str):
typer.echo(f"Hello {name}")
if __name__ == "__main__":
typer.run(main)
我将之保存为 a.py,然后执行测试一下,可以看到非常美观的提示信息:

3. Pendulum — 日期时间推荐库
日期时间处理经常牵涉时区、加减天数、格式化和可读性。Pendulum 的价值是用更接近人类理解的方式来处理日期时间:
import pendulum
dt = pendulum.now("UTC").add(days=3)
print(dt.to_datetime_string())
Pendulum 甚至可用于解析 “next Thursday at 5pm” 这样的描述。
4. Pydantic
我过去常常手动验证 JSON。(求轻拍…然后我找到了 Pydantic。定义一个带有类型提示的类,然后验证、记录、解析就都有了。
from pydantic import BaseModel
class User(BaseModel):
id: int
name: str
is_active: bool = True
用于:验证 API 响应、配置和输入数据。
注意:它是 FastAPI 的支柱是有原因的。但即使在网络世界之外,只要有结构化输入,仍然很值得关注。
5. Faker - 创建具有个性的虚拟数据
无论您是在模拟 API、生成开发数据库,还是只是试图生成令人信服的虚假用户资料,Faker 都能满足您的需求。
from faker import Faker
fake = Faker()
print(fake.name(), fake.email(), fake.address())
6. tqdm — 不耐烦的进度条
你可能以前见过这个。但是,如果您不虔诚地使用它,我们需要谈谈。
Tqdm 包装任何可迭代对象并显示一个智能的响应式进度条。非常适合循环、下载或观看大型作业,而不会静默冻结。

7. Requests-HTML
我喜欢 requests。我容忍 BeautifulSoup。但是 requests-html 呢?绝了。
它将请求的简单性与无头浏览器的解析功能相结合。而且:它执行 JavaScript!,这意味着您终于可以愉快地抓取现代网页了。
from requests_html import HTMLSession
session = HTMLSession()
r = session.get('https://example.com')
r.html.render()
print(r.html.find('h1')[0].text)
- 将其用于:抓取讨厌传统解析器的网站。
- 有趣的事实:它在后台使用了 Pyppeteer。Python 中的 JS 渲染,不一定非要上 Selenium。
8. Loguru - 日志不再是个苦差事
Python 中的默认日志记录是 … 冗杂,而且不直观。使用 Loguru,它使日志记录看起来像写入 journal,同时保留级别、文件轮转和彩色输出。
from loguru import logger
logger.add("debug.log", rotation="1 MB")
logger.info("Processing started...")
结论
这 8 个 Python 库的共同点不是“流行”,而是能把常见工程问题收敛成清晰 API。写脚本、做自动化、处理数据、构建内部工具时,先判断问题属于哪一类,再选择对应库,通常比从零手写更稳。
当然,引入第三方库也要考虑项目体量、依赖管理和运行环境。如果只是一次性几行脚本,标准库可能就够;如果是多人维护、需要长期运行或面向用户的工具,成熟库往往能节省更多调试成本。
FAQ
Q1:这些库都必须安装吗? A:不需要。它们对应不同场景,遇到 CLI、美化输出、数据验证、测试数据、进度条、抓取或日志问题时,再按需选择即可。
Q2:Rich 适合服务端日志吗? A:作为人工执行脚本的输出很适合。但如果是常驻进程日志,原文也提醒过,通常更建议结构化日志,例如 JSON,方便可观测性系统处理。
Q3:Pydantic 只能和 FastAPI 一起用吗? A:不是。它可以单独用于配置校验、API 响应解析、输入数据验证等场景。
Q4:Requests-HTML 适合所有网页抓取吗? A:不适合一概而论。它适合需要 JavaScript 渲染的页面,但抓取任务还要考虑目标站点规则、执行成本和稳定性。
- ✔️ 将其用于 :调试、生产日志和更好的睡眠。
- 👀 您看到了吗?: 一行替换
print()并配置一个完整的日志记录系统。
人生苦短,我用 Python!
不经意间,在监控领域创业四年了,如果您想索要监控/可观测性白皮书资料或申请产品演示,都可联系我们(免费哒)👇

原文:https://python.plainenglish.io/8-python-libraries-so-good-i-stopped-writing-my-own-scripts-8b5cca0d6aa1