包管理基础:conda install、conda update、conda remove
包管理,说白了就是给 Python 生态装轮子、换轮子、卸轮子。
你用 pip 能干的事,Conda 基本都能干,而且干得更干净。
我个人习惯是把 Conda 的包管理命令分成三类:装、升、删。
这三板斧玩熟了,日常开发基本够用。
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"
从指定频道安装:
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 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 不可逆) |
-n 指定环境的习惯。我自己在 .bashrc 里配了 export CONDA_ENV_SAFETY=1 来提醒自己——虽然只是个心理暗示,但有效。
一个真实的工作流
我平时接手项目时,常干这么一套组合拳:
conda env list看看本地有哪些环境conda create -n project_x python=3.9建一个新环境conda activate project_x切进去conda install -c conda-forge --file requirements.txt装依赖conda list确认版本- 干活……
- 收工时
conda env export > environment.yml锁定环境
这套流程里,install、update、remove 会交替出现。比如发现某个包版本不对,先 remove 再 install 指定版本;或者用 update 做小版本升级。
嗯,包管理就这点东西。但别小看这三条命令,用得熟练了,能省下大把跟环境斗争的时间。