4. 环境搭建:Python虚拟环境创建、依赖安装与项目目录结构设计

在开始编写限流熔断代码之前,必须搭建一个干净、可复现的实验环境。本节将带领你完成从虚拟环境创建到依赖安装,再到项目目录结构设计的全过程,确保后续所有案例都能在一致的沙箱中运行。

4.1 Python虚拟环境创建

虚拟环境是Python项目隔离依赖的标准做法。本课程统一使用Python 3.10+,推荐通过 venv 模块创建。

操作步骤:
  1. 打开终端,进入课程根目录(例如 ~/api-rate-limiting-course)。
  2. 执行 python3 -m venv venv 创建名为 venv 的虚拟环境。
  3. 激活虚拟环境:
    • Linux/macOS:source venv/bin/activate
    • Windows:venv\Scripts\activate
  4. 验证激活成功:终端提示符前出现 (venv) 前缀。
最佳实践:将虚拟环境目录命名为 venv 并添加到 .gitignore 中,避免将依赖包提交到版本控制。

4.2 依赖安装与版本锁定

本课程核心依赖包括:Flask(API框架)、Redis(分布式计数器后端)、Pyrate-limiter(限流算法库)。以下表格列出各依赖的用途与推荐版本。

依赖包 版本 用途
flask 3.0.x 构建REST API端点,接收客户端请求
redis 5.0.x 连接Redis实例,存储滑动窗口计数
pyrate-limiter 3.2.x 提供令牌桶、滑动窗口等限流算法实现
gunicorn 22.0.x 生产级WSGI服务器(可选,用于压力测试)

执行以下命令一次性安装所有依赖:

pip install flask redis pyrate-limiter gunicorn

安装完成后,使用 pip freeze > requirements.txt 锁定版本,确保团队成员或CI环境能复现完全相同的依赖组合。

避坑提示:Pyrate-limiter 3.x 版本对Redis适配器有独立的安装要求。如果后续遇到 ModuleNotFoundError: No module named 'pyrate_limiter.redis',请检查是否遗漏了 pip install pyrate-limiter[redis] 扩展安装。

4.3 项目目录结构设计

良好的目录结构能提升代码可维护性。本课程采用分层模块化设计,将限流逻辑、API路由、配置与测试分离。下图展示了完整的项目骨架。

项目目录结构图 api-rate-limiting-course/ app/ tests/ config/ __init__.py routes.py limiter.py middleware.py models.py test_limiter.py test_routes.py conftest.py default.py redis_config.py requirements.txt run.py 目录职责说明 app/ — 核心业务逻辑与限流实现 tests/ — 单元测试与集成测试 config/ — 环境配置与Redis连接参数

各模块文件的核心职责如下表所示:

文件/目录 职责
app/__init__.py Flask应用工厂函数,初始化扩展与蓝图
app/routes.py 定义API端点,绑定限流装饰器
app/limiter.py 封装Pyrate-limiter,创建限流器实例
app/middleware.py 实现请求前拦截与熔断状态检查
app/models.py 数据模型与Redis键值结构定义
config/default.py 默认配置项:限流阈值、时间窗口、Redis地址
config/redis_config.py Redis连接池配置与健康检查
tests/ pytest测试用例,覆盖限流逻辑与API响应
run.py 应用入口,启动开发服务器
requirements.txt 依赖锁定文件,用于环境复现

4.4 验证环境可用性

完成上述步骤后,执行以下命令快速验证环境是否就绪:

# 激活虚拟环境
source venv/bin/activate

# 检查关键包版本
python -c "import flask; print(f'Flask: {flask.__version__}')"
python -c "import redis; print(f'Redis: {redis.__version__}')"
python -c "from pyrate_limiter import Limiter; print('Pyrate-limiter: OK')"

如果所有命令均无报错并正确输出版本号,说明环境搭建成功。接下来即可进入第5章,开始编写第一个限流装饰器。