第3章:环境搭建——Python虚拟环境、依赖管理、Docker容器化与Linux基础配置
说实话,我见过太多量化新手在环境搭建上栽跟头了。明明代码写得挺好,一换机器就跑不起来。这种问题,说白了就是环境没管好。今天咱们就把这套东西彻底理清楚。
3.1 Python虚拟环境:为什么你需要它?
你想想看,一个量化项目可能依赖pandas 1.3,另一个项目却需要pandas 2.0。如果全装在一个全局环境里,早晚会冲突。虚拟环境就是干这个的——每个项目有自己的小天地。
3.1.1 用conda创建虚拟环境
我个人习惯用conda,尤其是做量化时,很多金融库(比如ta-lib)用pip装起来很麻烦,conda反而省心。
# 创建环境,指定Python版本
conda create -n quant_env python=3.9
# 激活环境
conda activate quant_env
# 安装常用量化库
conda install numpy pandas matplotlib scikit-learn
conda install -c conda-forge ta-lib backtrader
3.1.2 用venv创建虚拟环境
如果你不想装Anaconda(它确实有点重),Python自带的venv也够用。轻量、干净。
# 创建虚拟环境
python -m venv quant_venv
# 激活(Linux/Mac)
source quant_venv/bin/activate
# 激活(Windows)
quant_venv\Scripts\activate
3.2 依赖管理:requirements.txt的正确用法
环境搭好了,怎么让别人也能跑起来?答案就是requirements.txt。这玩意儿就是你的项目「药方」——列出所有依赖及其版本。
3.2.1 生成requirements.txt
# 导出当前环境的全部依赖
pip freeze > requirements.txt
但这里有个坑。pip freeze会导出所有包,包括那些间接依赖。我曾经因为这个吃过亏——别人用我的requirements.txt装完,发现版本冲突了。
所以我建议用pipreqs,它只扫描你代码里实际import的包:
# 安装pipreqs
pip install pipreqs
# 生成精简版requirements.txt
pipreqs ./ --force
3.2.2 从requirements.txt恢复环境
pip install -r requirements.txt
嗯,就这么简单。但要注意,最好在干净的虚拟环境里执行,别污染了全局。
3.2.3 版本锁定 vs 宽松版本
| 写法 | 含义 | 推荐场景 |
|---|---|---|
pandas==1.3.5 |
精确锁定版本 | 生产环境、需要复现结果 |
pandas>=1.3,<2.0 |
允许小版本升级 | 开发环境、团队协作 |
pandas |
不指定版本 | 快速原型、个人项目 |
3.3 Docker容器化部署:让环境「随身携带」
虚拟环境解决了本机隔离问题,但换台机器还得重新装。Docker就不一样了——它把整个环境(包括操作系统层)打包成一个镜像,走到哪都能跑。
3.3.1 编写Dockerfile
这是我常用的量化交易Dockerfile模板:
# 基于轻量级Python镜像
FROM python:3.9-slim
# 设置工作目录
WORKDIR /app
# 安装系统依赖(ta-lib需要)
RUN apt-get update && apt-get install -y \
build-essential \
libta-lib0 \
&& rm -rf /var/lib/apt/lists/*
# 复制依赖文件并安装
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# 复制项目代码
COPY . .
# 暴露端口(比如API服务)
EXPOSE 8000
# 启动命令
CMD ["python", "main.py"]
3.3.2 构建与运行
# 构建镜像
docker build -t quant-strategy:v1 .
# 运行容器
docker run -d --name my_quant -p 8000:8000 quant-strategy:v1
3.3.3 使用Docker Compose管理多服务
如果你的量化系统包含数据采集、策略计算、API服务等多个模块,Docker Compose就派上用场了。
version: '3.8'
services:
data-fetcher:
build: ./data-fetcher
volumes:
- ./data:/app/data
environment:
- API_KEY=${API_KEY}
strategy:
build: ./strategy
depends_on:
- data-fetcher
volumes:
- ./config:/app/config
api:
build: ./api
ports:
- "8000:8000"
depends_on:
- strategy
3.4 Linux服务器基础配置
量化策略最终要跑在服务器上。我个人偏爱Ubuntu Server LTS版本,稳定、社区活跃。
3.4.1 用户与权限管理
# 创建专用用户(别用root跑策略)
sudo useradd -m -s /bin/bash quantuser
sudo passwd quantuser
# 赋予sudo权限(谨慎)
sudo usermod -aG sudo quantuser
3.4.2 安装基础工具
# 更新系统
sudo apt update && sudo apt upgrade -y
# 安装必备工具
sudo apt install -y git curl wget htop net-tools
# 安装Docker(如果要用)
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USER
3.4.3 配置SSH安全访问
# 修改SSH配置
sudo vim /etc/ssh/sshd_config
# 建议修改:
# Port 2222(改默认端口,防扫描)
# PermitRootLogin no(禁止root登录)
# PasswordAuthentication no(禁用密码,只用密钥)
# 重启SSH服务
sudo systemctl restart sshd
3.4.4 设置防火墙
# 安装ufw
sudo apt install ufw
# 只开放必要端口
sudo ufw allow 2222/tcp # SSH
sudo ufw allow 8000/tcp # API服务
sudo ufw enable
3.5 本章知识体系总览
下面这张图帮你理清整个环境搭建的脉络:
3.6 本章小结
环境搭建看似琐碎,但它是量化交易系统的地基。我见过太多人花了两周写策略,却因为环境问题浪费三天调试。记住几个关键点:
- 虚拟环境是隔离的基石,conda和venv选一个用熟
- requirements.txt要精确锁定版本,别偷懒
- Docker让环境可移植,团队协作必备
- Linux服务器配置要安全第一,别留后门
嗯,这套流程我用了好几年,基本没出过环境问题。你照着做,也能省下不少折腾的时间。
公众号:蓝海资料掘金营,微信deep3321