3. 环境准备:Python虚拟环境搭建、依赖安装
在金融压力测试与混沌工程实践中,隔离且可复现的Python运行环境是保障实验准确性的基石。本节将指导你从零搭建包含Flask(API服务)、Redis(状态存储)、pybreaker(熔断器)和Locust(压测工具)的完整实验沙箱。
3.1 虚拟环境创建与激活
使用Python内置的venv模块创建隔离环境,避免与系统级Python包冲突。
操作步骤:
- 创建项目目录:
mkdir fin-stress-lab && cd fin-stress-lab - 创建虚拟环境:
python3 -m venv venv - 激活环境:
- Linux/macOS:
source venv/bin/activate - Windows:
venv\Scripts\activate
- Linux/macOS:
- 验证激活:终端提示符前出现
(venv)前缀
最佳实践: 将
venv/ 目录加入 .gitignore,避免将环境依赖提交到版本库。使用 pip freeze > requirements.txt 记录依赖快照。
3.2 核心依赖安装与版本锁定
下表列出本次课程所需的全部Python包及其在金融压测场景中的角色:
| 包名 | 版本建议 | 角色说明 | 安装命令 |
|---|---|---|---|
| Flask | ≥2.3.0 | 构建被压测的RESTful API服务,模拟交易/风控接口 | pip install flask |
| redis | ≥5.0.0 | 集中式限流计数器与熔断状态持久化存储 | pip install redis |
| pybreaker | ≥0.6.0 | 实现熔断器模式(Circuit Breaker),保护下游依赖 | pip install pybreaker |
| locust | ≥2.20.0 | 分布式压测引擎,模拟高并发用户请求 | pip install locust |
| gunicorn | ≥21.2.0 | 生产级WSGI服务器,用于Flask多进程部署 | pip install gunicorn |
版本兼容性注意: 若使用Python 3.12+,请确保
pybreaker 版本 ≥ 0.6.0,旧版本可能因 asyncio 接口变更而报错。建议在安装后执行 pip freeze | grep pybreaker 确认版本。
3.3 依赖安装验证脚本
执行以下Python脚本,快速验证所有依赖是否就绪:
# check_env.py
import sys
import flask
import redis
import pybreaker
import locust
print(f"Python版本: {sys.version}")
print(f"Flask版本: {flask.__version__}")
print(f"Redis版本: {redis.__version__}")
print(f"pybreaker版本: {pybreaker.__version__}")
print(f"Locust版本: {locust.__version__}")
print("✅ 所有依赖安装成功!")
运行命令:python check_env.py,输出应显示各包版本号且无 ImportError。
3.4 环境架构总览
下图展示了本课程实验环境的组件关系与数据流:
3.5 依赖清单固化
完成安装后,执行以下命令生成可复现的依赖文件:
pip freeze > requirements.txt
生成的 requirements.txt 内容示例:
blinker==1.7.0
click==8.1.7
Flask==3.0.0
gevent==23.9.1
gunicorn==21.2.0
itsdangerous==2.1.2
Jinja2==3.1.2
locust==2.20.1
MarkupSafe==2.1.3
msgpack==1.0.7
pybreaker==0.6.0
redis==5.0.1
Werkzeug==3.0.1
zope.event==5.0
zope.interface==6.1
团队协作建议: 将
requirements.txt 提交至Git仓库。新成员克隆后只需执行 python3 -m venv venv && source venv/bin/activate && pip install -r requirements.txt 即可复现完全一致的环境。
3.6 常见问题排查
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
ModuleNotFoundError: No module named 'redis' |
虚拟环境未激活或未安装 | 检查终端是否有 (venv) 前缀;重新执行 pip install redis |
pybreaker 安装后导入报错 |
Python 3.12+ 与旧版 pybreaker 不兼容 | 升级至 pip install pybreaker>=0.6.0 |
| Locust 启动后 Web UI 无法访问 | 端口 8089 被占用 | 使用 locust --web-port 8090 指定其他端口 |
| Flask 与 Redis 连接超时 | Redis 服务未启动或地址错误 | 执行 redis-cli ping 测试连通性;检查 REDIS_HOST 环境变量 |