第二章 开发环境搭建:工欲善其事,必先利其器

说实话,我见过太多人一上来就写代码,结果环境配了三天还没跑起来。抢单系统涉及的东西不少——Python、Flask、Redis、MySQL,哪个环节出问题都够你喝一壶的。这一章,咱们就把这些基础环境一一搞定。

我个人习惯是先把整个技术栈理清楚,再动手。你看下面这张图,就是我们这章要搭建的全部内容:

抢单系统开发环境全景图 抢单系统 Python 虚拟环境 Flask 框架 Redis 缓存/队列 MySQL 持久化存储 四个核心组件:虚拟环境隔离依赖 · Flask提供Web能力 · 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
⚠️ 注意: 我曾经犯过一个错误——把全局环境的包全 freeze 出来了,结果 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 表示成功
🔧 避坑指南: 我曾经在生产环境遇到过Redis内存爆满的问题。记得修改 /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;
⚠️ 重要提醒: 千万别用root用户连接应用!我见过太多人图省事直接用root,结果被黑客一锅端。创建一个专用用户,权限最小化,这是基本的安全素养。

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?」别急,后面章节我们会专门讲容器化部署,现在先把基础打牢。


专注资料整理