环境搭建与项目初始化:Python虚拟环境配置、依赖管理(Poetry)、项目目录结构设计

做市库存系统,说白了就是一套帮你管着「买什么、卖多少、什么时候调」的自动化工具。但再牛的系统,也得从地基开始搭。今天我们就来聊聊这个地基——环境搭建与项目初始化。

我个人习惯,每接手一个新项目,第一件事就是搭环境。不是因为我洁癖,而是被坑怕了。有一次我在一个共享服务器上跑策略,结果因为全局 Python 包版本冲突,整个回测结果全偏了。嗯,从那以后,我再也不敢偷懒了。

1. Python 虚拟环境:为什么必须隔离?

你想想看,一个量化系统往往依赖几十个第三方库。今天装个 pandas 0.25,明天装个 numpy 1.19,后天又来个 ta-lib。如果全装到全局,不出三个月,你的 Python 环境就成了一锅粥。

虚拟环境就是给每个项目一个「独立的小房间」。你在房间里随便折腾,外面干干净净。

核心原则:每个量化项目,必须拥有独立的虚拟环境。不要共用,不要偷懒。

Python 官方自带的 venv 模块就能创建虚拟环境。但我个人更推荐用 Poetry,因为它把「环境管理」和「依赖管理」合二为一了。省事,也省心。

2. 依赖管理:为什么选 Poetry?

做市库存系统对依赖的版本要求非常严格。比如回测框架 backtrader 和实时交易接口 ccxt,它们对 pandas 的版本要求可能完全不同。如果手动管理,你会疯掉。

Poetry 的好处在于:

  • 自动解析依赖冲突
  • 生成 poetry.lock 文件,锁定所有依赖版本
  • 支持 pyproject.toml 统一配置
  • 内置虚拟环境管理,不用再手动 source activate

我的经验:我在搭建第一个做市系统时,用了 pip + requirements.txt。结果部署到生产环境时,发现某个依赖版本不一致,回测和实盘结果对不上。后来换成 Poetry,再也没出过这种问题。

3. 项目目录结构设计:让代码自己会说话

一个做市库存系统,通常包含数据获取、策略引擎、风控模块、订单管理、日志监控等部分。如果所有代码都堆在一个文件夹里,三个月后你自己都看不懂。

我建议采用以下目录结构:

market_making_system/
├── pyproject.toml          # 项目配置与依赖
├── poetry.lock             # 依赖锁定文件
├── README.md               # 项目说明
├── .env                    # 环境变量(API密钥等)
├── .gitignore              # Git忽略规则
│
├── config/                 # 配置文件
│   ├── __init__.py
│   ├── settings.py         # 全局参数
│   └── instruments.yaml    # 交易品种配置
│
├── data/                   # 数据层
│   ├── __init__.py
│   ├── fetcher.py          # 数据获取
│   ├── cleaner.py          # 数据清洗
│   └── storage.py          # 数据存储
│
├── strategy/               # 策略层
│   ├── __init__.py
│   ├── base.py             # 策略基类
│   ├── inventory.py        # 库存管理策略
│   └── spread.py           # 价差策略
│
├── risk/                   # 风控层
│   ├── __init__.py
│   ├── limits.py           # 仓位限制
│   └── checks.py           # 风险检查
│
├── execution/              # 执行层
│   ├── __init__.py
│   ├── order.py            # 订单管理
│   └── broker.py           # 交易所接口
│
├── monitor/                # 监控层
│   ├── __init__.py
│   ├── logger.py           # 日志系统
│   └── dashboard.py        # 看板
│
├── tests/                  # 测试
│   ├── __init__.py
│   ├── test_strategy.py
│   └── test_risk.py
│
└── scripts/                # 脚本工具
    ├── run_backtest.py     # 回测启动
    └── deploy.py           # 部署脚本

避坑指南:我曾经把 API 密钥直接写在代码里,结果不小心提交到了 GitHub。虽然马上删了,但密钥已经被爬虫抓走了。所以,.env 文件一定要加进 .gitignore,而且永远不要提交。

4. 核心逻辑:一张图看懂

下面这张 SVG 图,展示了做市库存系统的核心模块与数据流向。你可以把它当作项目的「骨架」来理解。

做市库存系统核心架构 数据层 行情获取 · 数据清洗 策略层 库存管理 · 价差策略 风控层 仓位限制 · 风险检查 执行层 订单管理 · 交易所接口 监控层 日志系统 · 实时看板 行情数据 策略信号 通过检查 执行结果 反馈优化 数据从行情源流入,经过策略、风控、执行,最终反馈到监控与优化 每个模块独立部署,通过消息队列或API通信,便于扩展与维护

5. 动手:从零初始化项目

好了,理论说完了,我们直接上手。假设你已经在终端里了:

# 1. 安装 Poetry(如果还没装)
curl -sSL https://install.python-poetry.org | python3 -

# 2. 创建新项目
poetry new market_making_system
cd market_making_system

# 3. 添加核心依赖
poetry add pandas numpy ccxt backtrader pyyaml python-dotenv

# 4. 添加开发依赖
poetry add --dev pytest black flake8 mypy

# 5. 激活虚拟环境
poetry shell

# 6. 验证环境
python -c "import pandas; print(pandas.__version__)"

小技巧:如果你在公司网络环境下安装慢,可以配置国内镜像源。在 pyproject.toml 里加上:

[[tool.poetry.source]]
name = "aliyun"
url = "https://mirrors.aliyun.com/pypi/simple/"
default = true

6. 配置文件:别把秘密写进代码

做市系统需要连接交易所,必然涉及 API Key 和 Secret。我见过太多人直接把密钥写在 config.py 里,然后提交到 Git。这是大忌。

正确的做法是用 .env 文件:

# .env 文件内容
EXCHANGE_API_KEY=your_api_key_here
EXCHANGE_SECRET=your_secret_here
DB_HOST=localhost
DB_PORT=5432
LOG_LEVEL=INFO

然后在代码里用 python-dotenv 加载:

from dotenv import load_dotenv
import os

load_dotenv()

api_key = os.getenv("EXCHANGE_API_KEY")
secret = os.getenv("EXCHANGE_SECRET")

我曾经犯过的错:有一次我把测试网的密钥写进了代码,想着「反正测试网没关系」。结果不小心部署到了生产环境,测试网的密钥和生产网的混用了,导致订单全部发到了测试网。嗯,那次之后我学乖了——环境变量和代码彻底分离。

7. 版本控制:Git 是你的后悔药

做市系统迭代快,改策略、调参数是家常便饭。没有版本控制,你根本不知道哪次改动导致了问题。

我建议的 .gitignore 配置:

# Python
__pycache__/
*.pyc
*.pyo
*.egg-info/
dist/
build/

# 环境
.env
.venv/
venv/

# IDE
.vscode/
.idea/

# 数据
data/raw/
data/processed/
*.csv
*.parquet

# 日志
logs/
*.log

# 密钥
*secret*
*key*

初始化 Git 仓库:

git init
git add .
git commit -m "初始化做市库存系统项目结构"

8. 小结:地基打牢,后面才稳

环境搭建这件事,看起来琐碎,但直接影响后续开发效率。我见过太多团队,项目做到一半发现依赖冲突,或者部署时发现环境不一致,最后花大量时间排查。

记住三句话:

  • 虚拟环境隔离——每个项目一个独立空间
  • Poetry 管理依赖——自动解析冲突,锁定版本
  • 目录结构清晰——代码自己会说话

好了,环境搭好了,下一章我们开始写真正的做市逻辑。到时候你会感谢今天认真搭环境的自己。


专注资料整理