包管理基础:conda install、conda update、conda remove

包管理,说白了就是给 Python 生态装轮子、换轮子、卸轮子。
你用 pip 能干的事,Conda 基本都能干,而且干得更干净。

我个人习惯是把 Conda 的包管理命令分成三类:装、升、删。
这三板斧玩熟了,日常开发基本够用。

Conda 包管理核心操作流程 Conda 包管理三板斧 conda install 安装包 · 指定版本 · 从频道 conda update 更新包 · 更新环境 · 检查依赖 conda remove 移除包 · 清理环境 · 安全删除 install 常用场景 • conda install numpy • conda install -c conda-forge • conda install pandas=1.5 • conda install --file req.txt • conda install --dry-run update 常用场景 • conda update numpy • conda update --all • conda update conda • conda update -c channel • conda update --dry-run remove 常用场景 • conda remove numpy • conda remove --all • conda remove tensorflow • conda remove -n myenv pkg • conda clean --packages

conda install —— 装包的正确姿势

conda install 是日常用的最多的命令。
我刚用 Conda 那会儿,总觉得跟 pip 差不多,后来才发现细节差别挺大。

最基本的用法:

conda install numpy

这条命令会从默认频道(defaults)找最新的 numpy,然后把依赖一块拉进来。
你想想看,Conda 比 pip 强在哪儿?它连底层 C 库的依赖都能一起装上。

指定版本也很直接:

conda install numpy=1.21.0
# 或者用模糊匹配
conda install "numpy>=1.20,<1.22"
小技巧: 我习惯用双引号包住版本范围表达式,避免 shell 把 > 和 < 当成重定向符号。尤其是在 Linux 终端里,这个坑我踩过不止一次。

从指定频道安装:

conda install -c conda-forge opencv
# 也可以指定多个频道
conda install -c pytorch -c conda-forge pytorch torchvision

一个实用场景——批量安装:

# 先把包名列在文件里
echo -e "numpy\npandas\nscipy" > requirements.txt
# 然后一次性安装
conda install --file requirements.txt

另外,我经常用 --dry-run 来预览安装计划:

conda install --dry-run tensorflow

它会告诉你“如果我真装 tensorflow,会动哪些包”,但不真的执行。
这在生产环境里非常有用,能提前拦下意外升级。

注意: conda install 不带 -n 或 -p 时,默认操作当前激活的环境。我建议每次显式指定环境名,避免手滑装错地方。

conda update —— 更新但要小心

conda update 用来升级包或整个环境。
但说实话,我一般不会轻易执行 conda update --all。

为什么呢?因为 Conda 的依赖解析很严格,一个包升级可能牵动几十个依赖一起变。项目跑到一半,一更新全崩了,这种事我遇到过两次。

更新单个包:

conda update numpy

更新整个环境(慎重):

conda update --all

更新 Conda 自身:

conda update conda
# 如果想同时更新安装器
conda update anaconda

跟 install 一样,update 也支持 --dry-run:

conda update --dry-run --all
我的习惯: 更新前先跑一遍 conda list --explicit > env_snapshot.txt 导出当前环境的精确包列表。万一更新出问题,用 conda create --file env_snapshot.txt 就能快速恢复。

还有个小细节:
Conda 有时会提示“The following packages will be DOWNGRADED”。
别慌,这不一定是坏事。为了满足依赖冲突,Conda 可能会降级某个包来保证整体可用。说白了,就是“拆东墙补西墙”,只要墙不倒就行。

conda remove —— 卸载不是删文件那么简单

conda remove 比手动删 site-packages 优雅一万倍。

基本用法:

conda remove numpy

它会移除 numpy 以及所有依赖 numpy 且不再被其他包需要的包。
这就是 Conda 聪明的地方——它知道“谁还在用这个包”。

从指定环境中移除:

conda remove -n my_project pandas

清空整个环境:

conda remove --all -n old_env

这条命令会删掉 envs/old_env 目录下的所有东西。相当于把整个环境连根拔起。

小心: conda remove --all 不会问“你确定吗”?它直接就删了。我建议删之前先用 conda env export -n old_env > old_env_backup.yml 留个备份。反正我吃过这个亏。

另外,conda clean 是它的好搭档:

# 清理未使用的包缓存
conda clean --packages
# 清理所有缓存(tarballs、索引等)
conda clean --all

清理缓存能释放不少磁盘空间。尤其是你频繁装包、删包之后,pkgs/ 目录很容易膨胀到几十 GB。

三种命令的对比速查

命令 作用域 常用选项 风险等级
conda install 安装新包及依赖 -c, --file, --dry-run, -n 低(但可能升级依赖)
conda update 升级已有包 --all, --dry-run, -n 中(--all 风险较高)
conda remove 移除包及孤立依赖 --all, -n, --force 中高(--all 不可逆)
建议: 不管用 install、update 还是 remove,都养成加 -n 指定环境的习惯。我自己在 .bashrc 里配了 export CONDA_ENV_SAFETY=1 来提醒自己——虽然只是个心理暗示,但有效。

一个真实的工作流

我平时接手项目时,常干这么一套组合拳:

  1. conda env list 看看本地有哪些环境
  2. conda create -n project_x python=3.9 建一个新环境
  3. conda activate project_x 切进去
  4. conda install -c conda-forge --file requirements.txt 装依赖
  5. conda list 确认版本
  6. 干活……
  7. 收工时 conda env export > environment.yml 锁定环境

这套流程里,install、update、remove 会交替出现。比如发现某个包版本不对,先 remove 再 install 指定版本;或者用 update 做小版本升级。

嗯,包管理就这点东西。但别小看这三条命令,用得熟练了,能省下大把跟环境斗争的时间。