第二章 开发环境搭建:工欲善其事,必先利其器
说实话,我见过太多人一上来就写代码,结果环境配了三天还没跑起来。抢单系统涉及的东西不少——Python、Flask、Redis、MySQL,哪个环节出问题都够你喝一壶的。这一章,咱们就把这些基础环境一一搞定。
我个人习惯是先把整个技术栈理清楚,再动手。你看下面这张图,就是我们这章要搭建的全部内容:
2.1 Python虚拟环境配置
为什么要用虚拟环境?说白了,就是怕项目之间打架。你想想看,A项目用Flask 2.0,B项目用Flask 1.0,装在一起肯定出问题。虚拟环境就是给每个项目一个独立的小房间。
我刚开始写Python时也不爱用虚拟环境,觉得麻烦。直到有一次把公司的生产环境搞崩了...嗯,从那以后我再也不敢偷懒了。
2.1.1 创建虚拟环境
Python 3.3以上版本自带venv模块,直接用就行:
# 创建项目目录
mkdir rob_order_system
cd rob_order_system
# 创建虚拟环境
python3 -m venv venv
# 激活虚拟环境(Linux/Mac)
source venv/bin/activate
# 激活虚拟环境(Windows)
# venv\Scripts\activate
激活成功后,命令行前面会出现 (venv) 前缀,这就说明你已经在虚拟环境里了。
venv,这样在 .gitignore 里直接写一行 venv/ 就能忽略掉,省心。
2.1.2 管理依赖包
项目依赖需要记录,方便别人或自己以后重新搭建:
# 生成依赖清单
pip freeze > requirements.txt
# 查看清单内容
cat requirements.txt
# 别人拉取代码后安装依赖
pip install -r requirements.txt
2.2 Flask框架安装
Flask是个轻量级Web框架,特别适合做抢单系统这种API服务。它不像Django那么重,该有的功能又都有,说白了就是「够用就好」。
2.2.1 安装Flask
# 确保虚拟环境已激活
pip install flask
# 验证安装
python -c "import flask; print(flask.__version__)"
看到版本号输出,就说明安装成功了。我建议安装2.0以上版本,支持更多新特性。
2.2.2 安装扩展包
抢单系统还需要一些Flask扩展,咱们一次性装好:
pip install flask-sqlalchemy # 数据库ORM
pip install flask-migrate # 数据库迁移
pip install flask-redis # Redis集成
pip install flask-cors # 跨域支持
pip install flask-jwt-extended # JWT认证
📌 核心要点: 这些扩展不是必须一次性装完,但提前装好能省去后面频繁安装的麻烦。我一般会在项目初始化阶段就把常用扩展列好,一次性搞定。
2.3 Redis与MySQL环境搭建
抢单系统的核心痛点是什么?高并发。Redis负责扛住瞬时流量,MySQL负责数据持久化。这两个搭配起来,才能既快又稳。
2.3.1 安装Redis
Redis的安装方式因系统而异:
| 系统 | 安装命令 |
|---|---|
| Ubuntu/Debian | sudo apt-get install redis-server |
| CentOS/RHEL | sudo yum install redis |
| macOS | brew install redis |
| Windows | 下载MSI安装包或使用WSL |
安装完成后,启动Redis服务:
# 启动Redis
redis-server
# 测试连接
redis-cli ping
# 返回 PONG 表示成功
/etc/redis/redis.conf 中的 maxmemory 配置,设置一个合理的上限,比如 maxmemory 512mb。
2.3.2 安装MySQL
MySQL的安装同样分系统:
# Ubuntu
sudo apt-get install mysql-server mysql-client
# macOS
brew install mysql
# 启动MySQL服务
sudo systemctl start mysql # Linux
brew services start mysql # macOS
安装后需要做安全配置:
# 运行安全脚本
sudo mysql_secure_installation
# 登录MySQL
mysql -u root -p
# 创建抢单系统数据库
CREATE DATABASE rob_order_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# 创建专用用户
CREATE USER 'rob_user'@'localhost' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON rob_order_db.* TO 'rob_user'@'localhost';
FLUSH PRIVILEGES;
2.4 项目目录结构初始化
好的目录结构,能让项目后期维护省一半力气。我这些年踩过的坑告诉我:目录结构一定要在写第一行代码前就定好。
2.4.1 标准目录结构
rob_order_system/
├── app/ # 应用主目录
│ ├── __init__.py # 应用工厂
│ ├── models/ # 数据模型
│ │ ├── __init__.py
│ │ └── order.py
│ ├── routes/ # 路由/视图
│ │ ├── __init__.py
│ │ ├── order.py
│ │ └── user.py
│ ├── services/ # 业务逻辑
│ │ ├── __init__.py
│ │ └── order_service.py
│ ├── utils/ # 工具函数
│ │ ├── __init__.py
│ │ └── helpers.py
│ └── config.py # 配置文件
├── migrations/ # 数据库迁移文件
├── tests/ # 测试目录
│ ├── __init__.py
│ └── test_order.py
├── venv/ # 虚拟环境
├── .env # 环境变量
├── .gitignore
├── requirements.txt
└── run.py # 启动入口
2.4.2 创建目录脚本
手动创建太麻烦,我写了个小脚本一键生成:
#!/bin/bash
# init_project.sh
mkdir -p app/{models,routes,services,utils}
mkdir -p migrations tests
touch app/__init__.py
touch app/models/__init__.py
touch app/routes/__init__.py
touch app/services/__init__.py
touch app/utils/__init__.py
touch app/config.py
touch tests/__init__.py
touch .env .gitignore requirements.txt run.py
echo "项目目录初始化完成!"
2.4.3 配置文件示例
这是 app/config.py 的基础配置:
import os
class Config:
SECRET_KEY = os.environ.get('SECRET_KEY') or 'dev-key-123'
# MySQL配置
SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL') or \
'mysql+pymysql://rob_user:your_password@localhost/rob_order_db'
# Redis配置
REDIS_URL = os.environ.get('REDIS_URL') or 'redis://localhost:6379/0'
# JWT配置
JWT_SECRET_KEY = os.environ.get('JWT_SECRET_KEY') or 'jwt-secret-456'
JWT_ACCESS_TOKEN_EXPIRES = 3600 # 1小时
🎯 设计思路: 配置文件里所有敏感信息都从环境变量读取,同时提供默认值方便本地开发。这样既安全又灵活,部署到不同环境只需要改环境变量就行。
2.5 验证环境是否就绪
最后,写个简单的启动文件测试一下:
# run.py
from app import create_app
app = create_app()
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0', port=5000)
运行 python run.py,看到 Running on http://0.0.0.0:5000 就说明环境搭建成功了。
嗯,到这里,开发环境就全部就绪了。你可能会问:「怎么没有Docker?」别急,后面章节我们会专门讲容器化部署,现在先把基础打牢。