3、Python环境管理:Anaconda与Miniconda介绍、conda环境创建与管理、pip与requirements.txt、虚拟环境最佳实践
说实话,Python环境管理这事儿,我见过太多人栽跟头了。
刚入行那会儿,我自己也吃过亏——项目A需要TensorFlow 1.x,项目B需要2.x,结果全局装来装去,最后两个都跑不起来。嗯,从那以后,我彻底明白了:没有虚拟环境,MLOps就是空中楼阁。
核心观点:每个项目都应该有独立的Python环境。这不是建议,是铁律。
3.1 Anaconda vs Miniconda:我该选哪个?
先说说这两个东西的区别。说白了,Anaconda是个大礼包,里面预装了150+数据科学常用包。Miniconda就是个轻量版,只带conda和Python,其他包你自己装。
我个人习惯是这样的:
- 新手或做教学演示:用Anaconda,省事。我记得第一次给学生上课,直接装Anaconda,一节课下来环境就配好了。
- 生产环境或Docker镜像:用Miniconda。为什么?镜像体积小,部署快,而且你根本用不到那些预装包。
- 团队协作项目:Miniconda + environment.yml,干净利落。
| 特性 | Anaconda | Miniconda |
|---|---|---|
| 安装包大小 | ~3GB | ~500MB |
| 预装包数量 | 150+ | 仅基础 |
| 适用场景 | 学习、快速原型 | 生产、Docker、CI/CD |
| 灵活性 | 低 | 高 |
我的建议:如果你刚开始学MLOps,先装Miniconda。自己动手装包的过程,本身就是学习。我当年就是靠Miniconda一步步把环境管理搞明白的。
3.2 conda环境创建与管理
环境管理,说白了就是给每个项目一个「独立的小房间」。你想想看,项目A装Python 3.8 + PyTorch,项目B装Python 3.10 + TensorFlow,互不干扰,多清爽。
基本操作就这几招:
# 创建环境
conda create -n mlops_env python=3.9
# 激活环境
conda activate mlops_env
# 安装包
conda install numpy pandas scikit-learn
# 查看所有环境
conda env list
# 导出环境配置
conda env export > environment.yml
# 从文件创建环境
conda env create -f environment.yml
# 删除环境
conda remove -n mlops_env --all
这里有个坑,我曾经踩过:conda install和pip install混用。如果你先pip装了一堆包,然后又用conda装,很容易出现依赖冲突。我的经验是:能用conda装的优先用conda,conda没有的再用pip。
避坑指南:我曾经在一个项目里混用了conda和pip装包,结果环境炸了,花了整整一天排查。后来我定了个规矩——先conda装所有能装的,最后统一用pip补漏。
3.3 pip与requirements.txt
pip是Python官方的包管理工具,而requirements.txt就是它的「购物清单」。这个组合在MLOps里太常用了,尤其是部署到服务器或者Docker的时候。
基本用法:
# 生成当前环境的包列表
pip freeze > requirements.txt
# 从文件安装
pip install -r requirements.txt
# 只安装核心依赖(不包含依赖的依赖)
pip install --no-deps -r requirements.txt
requirements.txt长什么样?我给你看个实际项目的例子:
# 核心依赖
numpy==1.24.3
pandas==2.0.3
scikit-learn==1.3.0
# 深度学习框架
torch==2.0.1
torchvision==0.15.2
# 工具类
tqdm==4.65.0
pyyaml==6.0
# 注意:不要用 >=,要锁定版本号
# 否则不同时间安装可能得到不同版本
关键点:生产环境一定要锁定版本号。我见过太多「昨天还能跑,今天就不行了」的案例,原因就是requirements.txt里写了numpy>=1.20,结果新版本不兼容。
3.4 虚拟环境最佳实践
做了这么多年MLOps,我总结了一套自己的环境管理「心法」,分享给你:
- 一个项目一个环境,别偷懒。哪怕只是个小实验,也值得新建一个环境。
- 环境命名要有规律。我习惯用
项目名_用途的格式,比如nlp_service_prod、cv_experiment_v2。 - 环境配置文件要进版本控制。environment.yml或requirements.txt一定要和代码一起提交到Git。
- 定期清理无用环境。我每个月会跑一次
conda env list,把那些半年没用的环境删掉。 - Docker + conda 是绝配。在Dockerfile里用Miniconda创建环境,既保证了可复现性,又控制了镜像大小。
我的小技巧:在项目根目录放一个 setup_env.sh 脚本,新同事拉下代码后,直接运行这个脚本就能一键创建环境。省心又规范。
最后说一句:环境管理这事儿,看着琐碎,但它是MLOps的基石。你想想看,如果连环境都搞不定,模型训练、部署、监控这些后续工作根本无从谈起。
嗯,这一章就到这里。记住我说的:环境隔离做得好,MLOps之路走得稳。