第2章:搭建开发环境——Python、requests 与 http.client 库选型
动手写代码之前,先把环境收拾利索。这章我们聊聊 Python 环境的搭建、两个最常用的 HTTP 客户端库——requests 和 http.client,以及怎么在项目里选型。
我个人习惯用 pyenv 加 venv 来管理 Python 版本和依赖。为什么这么做?因为项目一多,版本冲突是家常便饭。我曾经见过同事直接把 requests 装系统 Python 里,后面换项目跑别的依赖,直接把系统搞崩了。嗯,避坑指南第一条:永远别动系统 Python。
2.1 Python 环境准备
先确认你机器上的 Python 版本。我这推荐 3.9 及以上,别用 2.7 了——你想想看,连 requests 的 3.0 版本都砍掉 Python 2 支持了。
- 安装 Python:去
python.org下安装包,或者用pyenv管理多版本。我用pyenv的主要场景是同一个 Linux 服务器上要跑不同版本的脚本,方便。 - 创建虚拟环境:
python -m venv env,然后source env/bin/activate(Windows 是env\Scripts\activate)。 - 升级 pip:
pip install --upgrade pip,每次创建完虚拟环境我都会跑一下,老版本 pip 有时候装包会出玄学问题。
.gitignore 里。我刚开始用 git 时把 env/ 也提交了,导致队友拉下来后权限不对,哭笑不得。
2.2 安装 requests 库
requests 是 Python 生态里最流行的 HTTP 库。安装就一行:
pip install requests
装完后验证一下:
python -c "import requests; print(requests.__version__)"
我一般会在项目根目录准备一个 requirements.txt,里面写上:
requests==2.31.0
这样别人拉代码后 pip install -r requirements.txt 就齐活了。锁定版本号是避坑的关键,否则某天 requests 自动升级到 3.x,API 一改,你的代码就炸了。就为这事,我吃过两次亏。
2.3 http.client 标准库——不装也能用
http.client 是 Python 自带的,不需要额外安装。它底层,接口比较原始。举个例子,发一个 GET 请求:
import http.client
conn = http.client.HTTPSConnection("api.example.com")
conn.request("GET", "/data")
resp = conn.getresponse()
print(resp.status, resp.reason)
data = resp.read()
conn.close()
看到了吧?得自己管理连接、关闭、处理编码。我个人只用它做两件事:一是写极简的监控脚本(不想装额外依赖),二是逆向某 HTTP 库的行为时抓底层报文。
2.4 库选型对比
那到底用 requests 还是 http.client?或者别的?我整理了一个对照表,你看着选。
| 维度 | requests | http.client | aiohttp(异步) |
|---|---|---|---|
| 安装方式 | pip 安装(第三方库) | 内置标准库 | pip 安装(第三方库) |
| API 风格 | 高级、语义化(session.get/post) | 底层、过程式 | 高级、异步(async/await) |
| 连接池 | 自动管理(urllib3 底层) | 手动管理 | 自动管理 |
| 超时/重试 | 原生支持 | 需手动实现 | 原生支持 |
| 适用场景 | 业务开发、快速集成 | 轻量脚本、底层调试 | 高并发、协程场景 |
你看,requests 在业务开发里基本是首选。不过它有个缺点——同步阻塞。如果你的外发通道要同时打几百个请求,那就得上 aiohttp 或者 httpx 的异步模式。但那是后面章节的内容,现在先用好 requests 打地基。
http.client 没有自动重定向处理、没有 JSON 解码器、没有会话保持。我曾经在生产环境里用它写日志上传,结果忘了设置超时,某个上游挂了半小时,我的脚本也跟着卡死半小时。从此之后,非纯工具类脚本我都用 requests。
2.5 我的推荐方案
大多数 HTTP 外发通道项目,我建议起步直接用 requests。原因就三条:
- 开发效率最高,三行代码搞定一个 POST 请求。
- 文档完善,Stack Overflow 上问题随搜随到。
- 社区活跃,安全问题修复快。
除非你明确要做 CPU 密集型的极简工具,或必须零依赖部署在受限环境,不然别碰 http.client。选型这件事,说白了就是权衡“灵活度”和“生产力”——我选生产力。
一句话总结:pip install requests,建虚拟环境,锁定版本,然后开工。
下面这张图概括了开发环境搭建的核心步骤和库选择逻辑,你可以贴在项目文档里作参考。