环境搭建与配置:Linux服务器初始化、Python环境部署、依赖管理与虚拟环境
做市系统跑在什么上面?说白了,就是一台Linux服务器。我见过太多团队,代码写得漂漂亮亮,结果环境一塌糊涂——Python版本不对、依赖冲突、权限乱给。嗯,今天我们就从零开始,把地基打牢。
Linux服务器初始化:别让系统拖后腿
拿到一台新服务器,第一件事不是装Python,而是做系统初始化。我个人习惯分三步走:
- 更新系统包——apt update && apt upgrade -y,这是基本操作
- 创建专用用户——千万别用root跑做市程序,风险太大
- 配置时区和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初始化、Python部署、依赖管理和虚拟环境这四个环节做好,你的做市系统就有了一个稳固的底座。剩下的,就是策略本身的事了。
公众号:蓝海资料掘金营,微信deep3321