第 1 章 · 03 环境搭建 本节摘要:本节解决一个工程现实问题——怎样把 ML4T 的代码跑起来。原项目 给出了两条路径:一是用 Docker 镜像 ,镜像里预装了 、 、 三个 conda 环境;二是本地用 (或深度学习专用的 )创建环境。本节讲清两条路径的关键步骤、TA-Lib 这种「带 C 库依赖」的包怎么装、为什么 Zipline 要用作者打补丁的版本、以及 Python 3.7(深度学习章 3.7、Zipline 章 3.5)的版本约束。读完本节,你能选一条路径把环境搭好,跑通第一个 notebook。 内容来源:原项目 、 下的环境文件、根 中关于软件版本的说明,汉化并套用体系化模板。
本节摘要:本节解决一个工程现实问题——怎样把 ML4T 的代码跑起来。原项目
installation/README.md给出了两条路径:一是用 Docker 镜像appliedai/packt:latest,镜像里预装了base、ml4t、ml4t-zipline三个 conda 环境;二是本地用conda env create -f environments/<os>/ml4t.yml(或深度学习专用的ml4t_dl.yml)创建环境。本节讲清两条路径的关键步骤、TA-Lib 这种「带 C 库依赖」的包怎么装、为什么 Zipline 要用作者打补丁的版本、以及 Python 3.7(深度学习章 3.7、Zipline 章 3.5)的版本约束。读完本节,你能选一条路径把环境搭好,跑通第一个 notebook。
内容来源:原项目
installation/README.md、installation/environments/下的环境文件、根README.md中关于软件版本的说明,汉化并套用体系化模板。
⚠️ 学习提示:本章依赖较重(TA-Lib 需 C 库、Zipline 已停更、TensorFlow 版本敏感),务必先在小数据集上跑通流程,不要一上来就处理 12GB 的 ITCH 文件。
阅读完本节,你应当能够:
base、ml4t、ml4t-zipline 各自的用途。ml4t.yml 与 ml4t_dl.yml 两个环境文件的适用范围。原项目主要基于 Python 3.7(Zipline 章节因历史原因用 3.5),依赖众多,在 Windows 上尤其麻烦。作者提供两条路:
| 方案 | 优点 | 缺点 |
|---|---|---|
| Docker 镜像 | 一行命令拉镜像即可,C 库依赖(TA-Lib)已就绪 | 占空间,内存默认偏低需调到 4GB+ |
| 本地 conda | 灵活,可与 IDE 深度集成 | Windows 装 TA-Lib/Zipline 易踩坑 |
💡 核心心法:如果你的目标只是「读懂并跑通 notebook」,优先 Docker;如果你要在自定义数据上长期开发,优先本地 conda。
按 installation/README.md 的指引,核心命令如下。
docker run -it -v $(pwd):/home/packt/ml4t -p 8888:8888 \ -e QUANDL_API_KEY=<你的key> --name ml4t appliedai/packt:latest bash
这条命令一次性完成五件事:
| 片段 | 作用 |
|---|---|
-v $(pwd):/home/packt/ml4t |
把当前目录(项目根)挂载进容器 |
-p 8888:8888 |
转发 Jupyter 端口 |
-e QUANDL_API_KEY=... |
注入 Quandl API 密钥(免费注册) |
--name ml4t |
容器命名为 ml4t,便于后续 docker start ml4t |
appliedai/packt:latest |
镜像名,基于 Ubuntu 20.04 + Anaconda |
进入容器后,conda env list 可看到三个环境:
base:基础环境。ml4t:默认环境,覆盖第 1~16 章。ml4t-zipline:专门跑 Zipline 回测(第 4~8 章涉及)。⚠️ 警告:
README提醒「容器的默认内存偏小,务必在 Docker Desktop 的 Resources 里把内存调到至少 4GB」,否则处理 ITCH(12GB 解压后)会 OOM。
不想用 Docker,就在本地装 miniconda,然后用作者提供的 environments/<os>/ml4t.yml 创建。installation/README.md 给出按操作系统分目录的环境规格:
| 文件 | 覆盖章节 | 路径示例 |
|---|---|---|
ml4t.yml |
第 2~16 章(数据、因子、回测、模型) | environments/linux/ml4t.yml |
ml4t_dl.yml |
第 17~22 章(深度学习/RL) | environments/linux/ml4t_dl.yml |
创建命令:
conda env create -f environments/linux/ml4t.yml # Linux conda env create -f environments/macos/ml4t.yml # macOS conda env create -f environments/windows/ml4t.yml # Windows
激活与退出:
conda activate ml4t conda deactivate
💡 核心心法:把深度学习单独拆出
ml4t_dl.yml,是因为 TensorFlow/GPU 依赖与 Zipline/pandas 老版本会冲突。让「传统 ML」与「深度学习」分环境共存,是工程上的妥协。
原书用 Zipline 做回测(第 4、5、8 章)。但 Quantopian 官方 Zipline 1.3 有两个让本书用起来很难的缺陷,作者因此维护了一个打补丁的 fork(github.com/stefan-jansen/zipline):
run_algorithm() 跑不通。补丁版本改用本地基准。Docker 镜像里的 ml4t-zipline 环境已装好这个补丁版。本地装的话,按 installation/README.md 的「Separate environment for using Zipline」一节:
# 用 pyenv 等工具建一个 Python 3.5 环境 pip install -U pip Cython git clone https://github.com/stefan-jansen/zipline cd zipline pip install -e . pip install jupyter pyfolio
第一次使用要先 ingest 数据:
conda activate ml4t-zipline zipline ingest # 会处理约 3000 只股票的价格序列
TA-Lib 是第 4 章的主力库,但它由 C 库 + Python 封装组成,直接 pip install TA-Lib 经常编译失败。installation/README.md 在末尾特别提醒「请按 TA-Lib 官方安装指引装好 C 库」。
| 操作系统 | C 库安装 |
|---|---|
| Linux | conda install -c conda-forge ta-lib 一般可直接带二进制 |
| macOS | brew install ta-lib 后再 pip install TA-Lib |
| Windows | 下载预编译的 TA_Lib-0.4.x-cp3x-win_amd64.whl,用 pip install <whl> 安装 |
⚠️ 警告:Windows 上从源码编译 TA-Lib 几乎必失败,优先找对应 Python 版本的预编译 whl。本教程第 4 章所有技术指标都依赖它,装不上后续会卡住。
README 推荐两个增强:
jupyter nbconvert --to script your_notebook.ipynb
启动 Jupyter(容器内已有别名):
jupyter notebook --ip 0.0.0.0 --no-browser --allow-root # 或镜像内置别名 nb # jupyter notebook lab # jupyter lab
appliedai/packt:latest 适合新手,本地 conda 适合长期开发。base / ml4t(默认,覆盖 2~16 章)/ ml4t-zipline(回测专用)。ml4t.yml(传统 ML)与 ml4t_dl.yml(深度学习)分开,避免依赖冲突。zipline ingest。下一章,我们正式进入「数据篇」,从 NASDAQ TotalView ITCH 订单簿重建 开始,学怎么从最原始的二进制 tick 消息重建出真实的订单簿。