环境准备:Linux服务器选型、Python环境安装、虚拟环境配置

做量化套利系统,第一步不是写代码,而是搭环境。

我见过太多人,代码写得挺溜,结果服务器选型就翻车了。要么配置太低跑不动回测,要么系统版本不对装不上依赖。说白了,环境准备这个环节,决定了你后面所有工作的稳定性。

核心要点:套利系统对延迟敏感,对稳定性要求极高。服务器选型、Python版本、虚拟环境隔离,这三件事必须一次做对。

1. Linux服务器选型:别在这上面省钱

我个人习惯用 Ubuntu 20.04 LTS22.04 LTS。为什么?

  • 社区活跃,遇到问题搜一下就有答案
  • 包管理工具 apt 用起来顺手
  • Python 3.8/3.10 默认支持,省去编译的麻烦

你想想看,套利系统跑在云服务器上,最怕什么?网络抖动、磁盘IO瓶颈、CPU飙高。所以选型时我建议关注这几个指标:

配置项 最低要求 推荐配置 说明
CPU 2核 4核及以上 回测和实盘同时跑,CPU不能省
内存 4GB 8GB+ 数据缓存、回测计算都吃内存
磁盘 40GB SSD 100GB SSD 历史数据存储,IOPS要够
带宽 5Mbps 10Mbps+ 行情数据实时推送,带宽别成瓶颈

我的经验:曾经有个项目,为了省钱选了1核2G的机器。结果回测时内存直接爆了,数据写到一半磁盘满了。嗯,后来老老实实升级配置,多花几百块,省了三天排查时间。

2. Python环境安装:版本选对,事半功倍

套利系统依赖的库比较多,比如 pandasnumpyccxtsqlalchemy 这些。Python 版本我建议用 3.9 或 3.10

为什么不用最新的 3.12?因为有些金融库还没完全适配,你装的时候会报错。我在项目中遇到过,ta-lib 在 3.11 上编译失败,折腾了半天才搞定。所以,稳一点,用 3.9 或 3.10。

安装步骤很简单:

# 更新包列表
sudo apt update

# 安装 Python 3.10
sudo apt install python3.10 python3.10-dev python3.10-distutils

# 安装 pip
wget https://bootstrap.pypa.io/get-pip.py
sudo python3.10 get-pip.py

# 验证安装
python3.10 --version
pip3 --version

注意:不要用系统自带的 Python 2.7,它已经停止维护了。也不要用 apt install python3 默认安装的版本,可能是 3.8 以下,有些新语法不支持。

3. 虚拟环境配置:隔离是必须的

你想想看,如果所有项目都共用一套 Python 环境,A项目需要 pandas 1.3,B项目需要 pandas 2.0,那不就冲突了吗?

虚拟环境就是干这个的。每个项目有自己的依赖空间,互不干扰。

我个人习惯用 venv,它是 Python 自带的,不需要额外安装。当然,也有人用 conda,但 conda 太重了,套利系统用 venv 完全够用。

# 创建虚拟环境
python3.10 -m venv arbitrage_env

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

# 检查是否激活成功
which python
# 输出应该指向 arbitrage_env/bin/python

# 安装依赖
pip install pandas numpy ccxt sqlalchemy

# 退出虚拟环境
deactivate

避坑指南:我曾经在部署时忘了激活虚拟环境,直接 pip install 装到了系统环境里。结果另一个项目跑起来报依赖冲突,排查了俩小时才发现。所以,每次操作前先看一眼命令行前面有没有 (arbitrage_env) 这个前缀。

4. 核心逻辑:一张图看懂环境准备

下面这张图,是我做这套课程时画的。它把环境准备的三个环节串起来了:

套利系统环境准备流程 1. 服务器选型 Ubuntu 20.04/22.04 LTS 2. Python环境 Python 3.9 / 3.10 3. 虚拟环境 venv 隔离依赖 关键配置清单: • 服务器:4核CPU / 8GB内存 / 100GB SSD / 10Mbps带宽 • Python:3.10 + pip 最新版 • 虚拟环境:venv 创建,命名规范如 arbitrage_env • 依赖管理:requirements.txt 锁定版本 提示:每次部署前,先跑一遍 pip list 确认环境干净

5. 依赖管理:用 requirements.txt 锁定版本

环境搭好了,依赖也装了。但有个问题:你本地装的是 pandas 1.5.3,服务器上装的是 2.0.0,有些 API 变了,代码跑不起来怎么办?

解决办法就是 锁定版本

# 导出当前环境的依赖列表
pip freeze > requirements.txt

# 在另一台机器上安装
pip install -r requirements.txt

看看 requirements.txt 的内容长什么样:

ccxt==4.0.78
numpy==1.24.3
pandas==1.5.3
python-dotenv==1.0.0
redis==4.5.4
requests==2.28.2
sqlalchemy==2.0.15
websocket-client==1.5.1

重要:每次更新依赖后,记得重新生成 requirements.txt。我习惯在项目根目录放一个 update_deps.sh 脚本,一键更新。

6. 验证环境:跑一个简单的测试

环境配好了,怎么知道它能不能用?写个简单的脚本验证一下:

# test_env.py
import sys
import pandas as pd
import numpy as np
import ccxt

print(f"Python 版本: {sys.version}")
print(f"Pandas 版本: {pd.__version__}")
print(f"Numpy 版本: {np.__version__}")
print(f"CCXT 版本: {ccxt.__version__}")

# 测试数据
data = pd.DataFrame({
    'price': np.random.randn(100)
})
print(f"数据测试通过,共 {len(data)} 条记录")
print("环境准备完成!")

运行它:

python test_env.py

如果所有版本都正常显示,没有报错,那恭喜你,环境准备这一步就稳了。

我的习惯:每次新项目开始前,我都会跑一遍这个测试脚本。它花不了30秒,但能帮你排除90%的环境问题。别等到代码写完了才发现装不上依赖,那才叫崩溃。


好了,环境准备这部分就到这里。记住三个关键词:Ubuntu LTS、Python 3.10、venv 隔离。这三件事做好了,后面的部署工作就顺了。