4. Python环境搭建:Python 3.10+安装、虚拟环境管理、依赖管理
做量化交易,尤其是跨交易所套利,Python环境搞不好,后面全是坑。我见过太多人花了一周写策略,结果因为环境问题浪费两天去排查。说白了,环境搭建就是地基,地基不稳,楼盖得再高也得塌。
这一章,我带你把Python 3.10+的安装、虚拟环境管理、依赖管理这三个核心环节彻底捋清楚。嗯,都是我在实战中踩过坑之后总结出来的经验。
4.1 Python 3.10+ 安装:别用太老,也别追太新
为什么强调3.10+?因为3.8、3.9虽然稳定,但很多新库(比如某些异步框架、类型注解特性)已经开始放弃对它们的支持了。而3.12、3.13刚出,部分第三方库还没适配好,容易出兼容性问题。
我个人习惯:生产环境用3.10或3.11,开发环境可以尝鲜3.12。跨交易所套利系统对网络IO和异步处理要求高,3.10+的协程和模式匹配特性用起来很顺手。
安装步骤(Linux / macOS / Windows)
| 系统 | 安装方式 | 备注 |
|---|---|---|
| Ubuntu/Debian | sudo apt install python3.10 python3.10-venv |
记得装venv模块 |
| macOS | brew install python@3.10 |
Homebrew管理,方便切换 |
| Windows | 官网下载安装包,勾选"Add to PATH" | 建议用pyenv-win管理多版本 |
apt install python3.10指定版本,或者用pyenv隔离管理。
4.2 虚拟环境管理:venv vs conda,我全都要
虚拟环境这东西,说白了就是给每个项目一个独立的Python解释器和包空间。你想想看,项目A需要pandas 1.5,项目B需要pandas 2.0,没有虚拟环境,你怎么办?
我常用的两种方案:
- venv:Python自带的轻量级方案,够用、简单、无依赖。
- conda:适合需要管理非Python依赖(如C++库、CUDA)的场景,或者团队协作时统一环境。
venv 实战
# 创建虚拟环境
python3.10 -m venv trading_env
# 激活(Linux/macOS)
source trading_env/bin/activate
# 激活(Windows)
trading_env\Scripts\activate
# 退出
deactivate
我个人习惯把虚拟环境建在项目根目录下,命名为.venv(前面加个点,隐藏起来,看着清爽)。然后在.gitignore里加上.venv/,避免把环境提交到代码仓库。
conda 实战
# 创建环境并指定Python版本
conda create -n trading_env python=3.10
# 激活
conda activate trading_env
# 退出
conda deactivate
# 导出环境
conda env export > environment.yml
# 从文件创建环境
conda env create -f environment.yml
4.3 依赖管理:从 requirements.txt 到 poetry
依赖管理,说白了就是把你项目用到的所有第三方库和版本号记录下来。这样别人拿到你的代码,一条命令就能把环境复现出来。
requirements.txt:经典方案
# 生成当前环境的依赖列表
pip freeze > requirements.txt
# 从文件安装依赖
pip install -r requirements.txt
嗯,这里有个坑。pip freeze会把所有依赖(包括依赖的依赖)都列出来,有时候会多出一些你根本没用到的包。我建议用pipreqs这个工具,它只扫描你代码里实际import的包:
pip install pipreqs
pipreqs ./ --encoding=utf-8 --force
poetry:现代方案
如果你觉得requirements.txt太简陋,想用更专业的工具,我推荐poetry。它集成了虚拟环境管理、依赖解析、打包发布等功能。
# 安装poetry
curl -sSL https://install.python-poetry.org | python3 -
# 初始化项目
poetry init
# 添加依赖
poetry add pandas numpy ccxt
# 安装所有依赖
poetry install
# 导出requirements.txt(兼容旧项目)
poetry export -f requirements.txt --output requirements.txt
- 自动解析依赖冲突(比pip聪明多了)
- 生成
poetry.lock文件,锁定所有依赖的精确版本 - 支持分组管理(dev依赖、生产依赖分开)
我在跨交易所套利项目中,用的是poetry + conda的组合。conda管理Python版本和系统级依赖,poetry管理Python包。这样既保证了环境一致性,又享受了poetry的依赖解析能力。
4.4 知识体系总览
下面这张图,是我对本章知识体系的总结。你可以把它当作一张地图,随时回来对照。
4.5 避坑指南:我踩过的那些雷
最后,分享几个我在实战中遇到的典型问题,希望能帮你少走弯路。
pip install,结果破坏了系统依赖。我曾经在服务器上装了一个新版本的requests,结果系统自带的某个工具因为依赖冲突直接罢工了。从那以后,我坚持每个项目都用虚拟环境。
pandas==1.5.3。后来发现这个版本有个bug,导致我的套利策略在特定行情下算错了价差。现在我的做法是:用>=指定最低版本,同时用lock文件锁定精确版本。
Makefile,把常用的环境命令写进去。比如make setup自动创建虚拟环境并安装依赖,make clean删除环境。这样团队里任何人拿到项目,一条命令就能搞定环境。
好了,Python环境搭建这部分就讲到这里。记住一句话:环境搞好了,后面写策略才能安心。下一章我们开始讲跨交易所API对接,那才是真正有意思的部分。