环境搭建与配置:Linux服务器初始化、Python环境部署、依赖管理与虚拟环境

做市系统跑在什么上面?说白了,就是一台Linux服务器。我见过太多团队,代码写得漂漂亮亮,结果环境一塌糊涂——Python版本不对、依赖冲突、权限乱给。嗯,今天我们就从零开始,把地基打牢。

Linux服务器初始化:别让系统拖后腿

拿到一台新服务器,第一件事不是装Python,而是做系统初始化。我个人习惯分三步走:

  1. 更新系统包——apt update && apt upgrade -y,这是基本操作
  2. 创建专用用户——千万别用root跑做市程序,风险太大
  3. 配置时区和NTP——做市系统对时间敏感,偏差超过毫秒级就可能出问题

核心要点:做市系统的服务器,时间同步是命根子。我曾经因为NTP没配好,导致订单时间戳错乱,一晚上亏了十几万。从那以后,我每次初始化都会手动检查chronyd状态。

具体命令长这样:

# 更新系统
sudo apt update && sudo apt upgrade -y

# 创建做市专用用户
sudo useradd -m -s /bin/bash marketmaker
sudo passwd marketmaker

# 配置NTP时间同步
sudo apt install chrony -y
sudo systemctl enable chrony
sudo systemctl start chrony
chronyc sources -v   # 确认同步状态

小技巧:我习惯把SSH端口改成非标准端口,比如2222。虽然不能完全防住扫描,但能过滤掉99%的脚本小子。改完记得配防火墙。

Python环境部署:版本选择有讲究

做市系统对Python版本要求其实挺苛刻的。太新的版本,第三方库可能不兼容;太旧的版本,性能和安全都有隐患。我个人推荐Python 3.10或3.11,这两个版本在稳定性和生态支持上达到了比较好的平衡。

安装方式我建议用pyenv,而不是直接apt安装。为什么?因为apt装的Python版本通常比较老,而且你很难在同一台机器上切换多个版本。做市系统有时候需要同时维护多个策略,每个策略可能依赖不同的Python版本。

# 安装pyenv
curl https://pyenv.run | bash

# 配置环境变量(加到~/.bashrc里)
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc

# 安装Python 3.10.12
pyenv install 3.10.12
pyenv global 3.10.12

# 验证
python --version  # 应该显示 3.10.12

注意:安装pyenv之前,需要先装好编译依赖。否则编译Python时会报错。我踩过这个坑,折腾了半小时才发现是少了libssl-dev。

# 安装编译依赖(Ubuntu/Debian)
sudo apt install -y make build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \
libncurses5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev

依赖管理:别让pip install毁了你

做市系统的依赖管理,我见过最惨的案例:有人直接在全局环境pip install,结果两个策略的依赖版本冲突,一个要numpy 1.21,另一个要1.24,最后整个环境崩了。嗯,这就是为什么我们需要虚拟环境。

我个人推荐用Poetry,而不是传统的pip+requirements.txt。Poetry能自动解析依赖树,生成lock文件,确保每次部署的环境完全一致。这对做市系统来说太重要了——你想想看,生产环境和测试环境差一个依赖版本,可能就会导致策略表现完全不同。

工具 优点 缺点
pip + venv 轻量、系统自带 依赖解析弱、无lock文件
Poetry 依赖解析强、有lock文件、支持发布 学习成本稍高
Conda 支持非Python依赖 体积大、速度慢

我个人选择Poetry,原因很简单:它的lock文件能保证「一次安装,到处运行」。做市系统部署到多台服务器时,这个特性太香了。

# 安装Poetry
curl -sSL https://install.python-poetry.org | python3 -

# 初始化项目
poetry new marketmaker-strategy
cd marketmaker-strategy

# 添加依赖
poetry add pandas numpy ccxt redis
poetry add --dev pytest black flake8

# 安装依赖
poetry install

# 激活虚拟环境
poetry shell

避坑指南:我曾经在Poetry的虚拟环境里直接pip install,结果依赖全乱了。记住:用了Poetry就只用poetry add,别混用pip。否则lock文件就废了。

虚拟环境:隔离是王道

虚拟环境说白了就是给每个项目一个独立的Python沙箱。你做市策略A依赖redis 4.0,策略B依赖redis 5.0,虚拟环境能让它们和平共处。

如果你不用Poetry,用Python自带的venv也完全够用:

# 创建虚拟环境
python -m venv venv_marketmaker

# 激活
source venv_marketmaker/bin/activate

# 安装依赖
pip install -r requirements.txt

# 退出
deactivate

但说实话,我建议团队统一用Poetry。为什么?因为多人协作时,requirements.txt很容易出现「我装了A,你装了B,但没人记得装C」的情况。Poetry的pyproject.toml和poetry.lock能精确锁定每个依赖的版本,谁也别想偷懒。

我的经验:做市系统的依赖管理,核心就一句话——可复现。你今天的部署方式,三个月后还能一模一样地跑起来,这才叫专业。我曾经接手过一个项目,requirements.txt里写着numpy>=1.20,结果半年后numpy出了1.25,自动升级后策略直接崩了。从那以后,我所有项目都强制锁定版本。

本章知识体系

下面这张图,是我对本章内容的总结。你可以把它当作一个检查清单:

环境搭建与配置 · 知识体系 做市系统环境搭建 Linux服务器初始化 系统更新 创建专用用户 NTP时间同步 SSH安全加固 Python环境部署 推荐 3.10 / 3.11 使用 pyenv 管理版本 安装编译依赖 全局 vs 项目级 依赖管理 Poetry 推荐 lock 文件锁定版本 避免混用 pip 团队统一工具 虚拟环境 项目隔离 venv 或 Poetry 可复现部署 避免全局污染 核心目标 可复现 可隔离 可维护

环境搭建这件事,看起来琐碎,但做不好就是灾难。我见过太多团队在环境上翻车——要么依赖冲突,要么版本不对,要么权限混乱。记住:做市系统是跑真金白银的,环境问题导致的故障,代价往往比策略本身的问题还大。

嗯,这一章的内容就到这里。把Linux初始化、Python部署、依赖管理和虚拟环境这四个环节做好,你的做市系统就有了一个稳固的底座。剩下的,就是策略本身的事了。


公众号:蓝海资料掘金营,微信deep3321