第三讲:Python环境与依赖库——搭建你的量化研究工坊

做统计套利,说白了就是跟数据打交道。而Python环境,就是你的工作台。

我见过太多人,一上来就pip install一堆包,结果版本冲突、依赖报错,折腾半天还没开始写代码。嗯,这其实完全可以避免。今天我就带你一步步搭好这个环境,保证后面写策略的时候,一路顺畅。

3.1 为什么选Anaconda?

你可能听说过Python自带的venv,或者直接用系统Python。我个人习惯用Anaconda,原因很简单——省心。

Anaconda自带了一个包管理器叫conda,它比pip强在哪?它能帮你处理底层依赖,比如numpy依赖的BLAS库、statsmodels依赖的C扩展。这些用pip装,有时候会报一些莫名其妙的错。conda直接给你装好二进制包,省去编译的麻烦。

另外,Anaconda还自带了一个叫Navigator的图形界面。虽然我平时用命令行,但对新手来说,点几下鼠标就能创建环境,确实友好。

我的建议: 如果你只是做量化回测,装Miniconda就够了。它只有conda+Python,体积小很多。Anaconda预装了一堆你可能用不到的包,比如图像处理、网页爬虫之类的。

3.2 安装Anaconda

去官网下载对应系统的安装包。Windows用户记得选64位版本。安装时有个坑——一定要勾选「Add Anaconda to my PATH environment variable」。我刚开始没勾,后面每次都要手动找conda命令,烦得很。

装完后,打开终端(Windows用Anaconda Prompt),输入:

conda --version

如果看到版本号,说明装好了。没看到?检查一下环境变量,或者重启终端试试。

3.3 创建虚拟环境

为什么要用虚拟环境?你想想看,不同项目可能依赖不同版本的pandas。A项目用1.3.0,B项目用2.0.0。混在一起,迟早出问题。

我一般这样创建:

conda create -n statarb python=3.9

这里statarb是环境名,你可以改成自己喜欢的。Python版本我选3.9,因为3.10以上有些量化库还没完全适配。当然,现在2025年了,3.11也稳了,但3.9最保险。

创建完,激活它:

conda activate statarb

你会看到终端前面多了个(statarb),说明你已经在虚拟环境里了。这时候你装任何包,都不会影响系统Python。

注意: 每次打开新终端,都要重新激活环境。我习惯在项目根目录放一个activate.sh脚本,里面写一行conda activate statarb,省得每次手动敲。

3.4 核心库安装

好,环境有了,现在装核心库。统计套利回测,离不开这几个库:

库名 用途 安装命令
pandas 数据处理、时间序列操作 conda install pandas
numpy 数值计算、矩阵运算 conda install numpy
statsmodels 统计模型、协整检验、OLS回归 conda install statsmodels
scipy 科学计算、优化算法 conda install scipy
matplotlib 基础绘图 conda install matplotlib
seaborn 统计图表美化 conda install seaborn

你可以一次性装完:

conda install pandas numpy statsmodels scipy matplotlib seaborn

conda会自动解析依赖关系,找到兼容的版本。这个过程可能需要几分钟,别急。

装完后,验证一下:

python -c "import pandas; print(pandas.__version__)"

如果没报错,说明装好了。

避坑指南: 我曾经在statsmodels上栽过跟头。当时用pip装的最新版,结果做协整检验时,某个函数参数名变了,代码跑不通。后来换成conda安装的稳定版,问题解决。所以,能用conda就别用pip,除非conda源里没有。

3.5 依赖库的版本选择

你可能想问:版本是不是越新越好?不一定。量化回测讲究可复现。你今天用pandas 2.1.0写的策略,半年后pandas升级到2.5.0,某个函数行为变了,回测结果对不上,那就尴尬了。

我一般会固定版本号。比如:

conda install pandas=1.5.3 numpy=1.24.3 statsmodels=0.14.0

这样,不管什么时候重装环境,版本都一样。你也可以把依赖写到一个requirements.txt里:

pandas==1.5.3
numpy==1.24.3
statsmodels==0.14.0
scipy==1.10.1
matplotlib==3.7.1
seaborn==0.12.2

然后用:

conda install --file requirements.txt

一键安装,省心省力。

3.6 环境导出与复制

环境搭好了,怎么分享给同事?或者换电脑时怎么迁移?

导出当前环境:

conda env export > environment.yml

这个yml文件记录了所有包及其版本。别人拿到后,直接:

conda env create -f environment.yml

就能复刻一个一模一样的环境。注意,这个文件会包含一些系统相关的包,比如openssl、libffi。跨平台(比如Windows到Mac)可能会有问题。这时候可以用:

conda env export --from-history > environment.yml

它只记录你手动安装的包,跨平台兼容性更好。

3.7 知识体系总览

说了这么多,我画了一张图,帮你理清整个环境搭建的逻辑:

统计套利环境搭建知识体系 Anaconda / Miniconda 虚拟环境 (statarb) 核心库安装 版本固定与导出 pandas / numpy statsmodels / scipy matplotlib / seaborn requirements.txt environment.yml

这张图把整个流程串起来了。从Anaconda出发,创建虚拟环境,然后装核心库,最后用版本管理工具固定环境。每一步都踩过坑,才总结出这个流程。

3.8 验证环境是否可用

装完别急着关终端。写个简单脚本,验证所有库都能正常导入:

import pandas as pd
import numpy as np
import statsmodels.api as sm
from scipy import stats
import matplotlib.pyplot as plt
import seaborn as sns

print("所有库导入成功!")
print(f"pandas版本: {pd.__version__}")
print(f"numpy版本: {np.__version__}")
print(f"statsmodels版本: {sm.__version__}")

如果没报错,恭喜你,环境搭好了。如果报错,多半是版本冲突。这时候别慌,用conda list看看已安装的包,找到冲突的包,重新装一个兼容版本就行。

小技巧: 我习惯在项目根目录放一个check_env.py,里面就是上面这段代码。每次换电脑或者重装环境,先跑一遍,确保所有依赖都正常。省得写到一半才发现某个包没装。

好了,环境搭好了,后面就可以安心写策略了。记住,环境是地基,地基稳了,楼才能盖得高。


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