第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。原因就三条:

  1. 开发效率最高,三行代码搞定一个 POST 请求。
  2. 文档完善,Stack Overflow 上问题随搜随到。
  3. 社区活跃,安全问题修复快。

除非你明确要做 CPU 密集型的极简工具,或必须零依赖部署在受限环境,不然别碰 http.client。选型这件事,说白了就是权衡“灵活度”和“生产力”——我选生产力。

一句话总结:pip install requests,建虚拟环境,锁定版本,然后开工。

下面这张图概括了开发环境搭建的核心步骤和库选择逻辑,你可以贴在项目文档里作参考。

开发环境搭建 & 库选型流程 安装 Python 3.9+ 创建虚拟环境 (venv) 安装 requests 库 选 requests (业务开发首选) 选 http.client (极简/调试场景) 锁定版本,开始编码 🔧 推荐:初期用 requests + venv,后续高性能需求再切异步方案