4. Conda虚拟环境搭建:Miniconda安装、环境创建与切换、常用包的版本管理

说到环境管理,我接触过的团队里,七八成都是因为环境冲突把项目搞崩过。你想想看,一个项目依赖PyTorch 1.10,另一个依赖2.0,全装到系统Python里——不炸才怪。我个人习惯是,每个项目一开始就建独立的Conda环境,从根上隔离依赖。

4.1 为什么非用虚拟环境不可

深度学习项目依赖的包版本极其敏感。举个例子,我去年维护过一个药物分子生成模型,它要求PyTorch 1.12.0 + CUDA 11.3,而团队另一个靶点预测项目需要PyTorch 2.0.1 + CUDA 12.1。如果没有虚拟环境,这两个项目的水土冲突会让你天天花时间重装包。

对比项系统PythonConda虚拟环境
包隔离全部共享每个环境独立
Python版本固定每个环境可不同
CUDA版本只能装一套按需搭配
删除重建容易污染一条命令清干净

一句话总结:虚拟环境 = 项目的独立「沙盒」,你怎么折腾都不影响别人。

4.2 Miniconda 安装

我推荐用Miniconda而不是完整版Anaconda。Anaconda预装了一堆你用不上的包,而Miniconda只带基本的conda和Python。说白了,你需要什么装什么,磁盘占用少很多。

4.2.1 Linux 环境安装

下载安装脚本,然后执行:

wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh

安装过程中会问你许可协议和安装路径。我一般保持默认路径 ~/miniconda3。最后一步会问你是否自动初始化conda,选yes就好。

小技巧:如果你不想每次启动终端都自动激活base环境,可以设置 conda config --set auto_activate_base false。这样按需激活,不挡手。

4.2.2 macOS 安装

和Linux类似,用pkg安装包或者命令行都行。我个人习惯命令行:

curl -O https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-x86_64.sh
bash Miniconda3-latest-MacOSX-x86_64.sh

M1/M2芯片的Mac注意选 Miniconda3-latest-MacOSX-arm64.sh。

4.2.3 Windows 安装

去官网下载exe安装包,一路Next。安装时记得勾选「Add Miniconda to my PATH environment variable」,否则你需要在终端里手动定位。我之前帮同事排查问题,他忘了勾选,结果每次用conda都得输全路径——很痛苦。

4.3 环境创建与切换

4.3.1 创建新环境

conda create -n drug_target python=3.10

-n 后面是环境名,你可以起个有意义的名字,比如项目名。

如果你想指定更多依赖,可以在创建时就列好:

conda create -n pytorch_project python=3.10 pytorch=2.1.0 torchvision cudatoolkit=11.8

4.3.2 激活与切换

conda activate drug_target     # 进入环境
conda deactivate               # 退出当前环境
conda info --envs               # 列出所有环境

我记得有一次,我同时维护着三个环境:一个用于模型训练(依赖PyTorch),一个用于ONNX导出(依赖onnxruntime),还有一个用于模型量化(依赖tensorrt)。频繁切换时,我一般先 conda deactivate 再 conda activate,避免环境残留。

警告:千万别在base环境里装生产项目的依赖包!base环境是用来管理conda本身的,乱装包可能导致conda升级出问题。我曾经因为这个把base的Python搞坏,不得不重装Miniconda。

4.4 包的版本管理

4.4.1 安装特定版本

conda install numpy=1.21
pip install torch==2.0.1

注意:能用conda装的尽量用conda装,因为它会帮你解决依赖冲突。实在找不到的,再用pip。

4.4.2 查看已安装包

conda list
conda list | grep numpy

4.4.3 更新与回滚

conda update numpy
conda install numpy=1.20   # 降级回旧版本

降级可能出现依赖冲突,这时候conda可能会提示你删除一些包。我会先看它建议的方案,如果觉得可行就确认,否则用 conda install --no-deps 强行装,但需要你自己保证兼容性。

4.4.4 导出和重建环境

conda env export > environment.yml
conda env create -f environment.yml

这个操作用于团队协作或部署时复现环境。我每次提交代码前都会导出一份 environment.yml,确保队友和服务器能跑出一样的结果。

实践经验:导出时默认会带上当前环境的平台信息和版本号。如果你想跨平台共享,可以用 conda env export --no-builds,去掉build标识,兼容性更好。

4.5 Conda 虚拟环境核心流程

Conda虚拟环境搭建流程 安装 Miniconda 创建虚拟环境 激活 & 安装依赖 包版本管理 导出 environment.yml 每个项目一个独立环境,避免依赖冲突 使用 conda list / conda env export 做版本追溯

4.6 常见问题与避坑

  • conda 命令找不到:检查PATH里有没有 ~/miniconda3/bin。重新运行 conda init 可以修补。
  • 环境删不掉:用 conda remove -n env_name --all。我碰到过一次因为文件锁删不了,重启终端就好了。
  • pip 和 conda 混装:尽量先用conda装环境,再个别用pip补。混装太多容易导致依赖解析出问题。
  • 磁盘空间:conda clean --all 可以清理缓存包和未使用的索引,我每个月跑一次,能释放几个G。

我的习惯:每个项目根目录放一个 environment.yml,并且在README里写清楚创建环境的命令。这样任何人拿到代码,三分钟就能把环境搭好。

嗯,Conda这块其实没那么复杂。核心就三步:装Miniconda → 创建环境 → 激活并装包。剩下的就是用好导出和导入,让你在不同机器上保持环境一致。你试试看,一个项目一个环境,干净利落。