第4章 Conda包管理:安装、卸载、更新与版本控制

包管理是Conda的核心功能,说白了就是帮你装东西、卸东西、换版本。刚开始接触时我觉得挺简单,直到有次在项目里搞混了channel版本,花了我一下午排查…嗯,这里有不少门道。我带你一个个过。

4.1 安装包

最基本的安装命令长这样:

conda install numpy

一次装多个也行,空格分开:

conda install numpy scipy matplotlib

这里有个小坑:如果你不指定channel,Conda会从默认的defaults(也就是Anaconda官方仓库)找。但我个人更推荐用conda-forge,它更新快、包更全。怎么用?加个-c参数:

conda install -c conda-forge pandas

小技巧: 你可以在.condarc里把conda-forge设为默认channel,这样以后就不用手动加-c了。我团队里所有项目都这么配的。

4.2 指定版本安装

很多时候我们不需要最新版,而是某特定版本。比如我遇到过TensorFlow 2.10和某个旧代码的兼容问题,当时必须锁死2.8.0。

conda install tensorflow=2.8.0

版本号可以用等号或者双等号。也支持通配符:

conda install "tensorflow>=2.8,<2.10"

警告: 指定版本时容易触发依赖冲突。Conda会尝试解决,但有时解不出来就报错。我曾经因为一个包要求Python 3.7,另一个要3.9,环境中却只有3.8,卡了半天。建议先用conda search <package> --info查清楚依赖树。

4.3 更新包

更新单个包:

conda update numpy

更新环境里所有包:

conda update --all

我个人很少用--all,为啥?因为可能把核心依赖(比如Python)也给升了,导致整个环境崩掉。有一次在生产环境手滑执行了conda update --all,Python从3.8跳到了3.10,项目直接启动不了了…还好有conda env export备份。

所以我的建议是:只更新你确定需要更新的包,其他保持不动。

4.4 卸载包

conda remove numpy

这个命令只删除numpy本身,不会自动删除它的依赖。要想连带卸载那些不再被任何包需要的“孤儿”依赖,可以加--remove-all(其实是conda clean --force-pkgs-dirs加手动清理)。但更干净的方案是重建环境。

顺带提一嘴conda clean:

conda clean --all

这个命令清理下载缓存、未使用的包包、锁文件等。我每两周跑一次,硬盘能腾出好几个G。

4.5 从conda-forge安装

刚才提过用-c conda-forge临时指定。如果你想永久把conda-forge设为默认,编辑~/.condarc:

channels:
  - conda-forge
  - defaults

优先级从上往下:conda-forge排第一,Conda会优先从这个channel获取包。我踩过的另一个坑是:如果conda-forge和defaults混用,Conda可能会从两个channel拉不同版本的依赖,造成“环境不可解”。解决方法是尽量统一,要么全走conda-forge,要么全走defaults,别混。

重要: 如果你的包在conda-forge里没有,Conda会自动降级去defaults找。但这可能导致版本不匹配。我习惯先用conda search -c conda-forge <package>确认。

4.6 综合实例:管理科学计算环境

我自己经常在数据科学项目中这样操作:

conda create -n mydata python=3.10 -c conda-forge
conda activate mydata
conda install -c conda-forge jupyter numpy pandas matplotlib scikit-learn
# 安装特定版本
conda install "pytorch=1.13" -c pytorch
# 确认安装
conda list | grep numpy
# 更新一个包
conda update numpy
# 卸载不用的包
conda remove matplotlib
# 清理缓存
conda clean --all

基本上覆盖了日常所有操作。你只要记住:先建环境,再装包,用conda-forge,锁版本,几乎不会出大问题。

Conda包管理工作流 安装包 指定版本/Channel 更新包 卸载包 conda clean清理 验证环境状态 推荐流程:安装→指定版本/Channel→更新/卸载→清理→验证,保持环境可控