4. 包管理基础:增删查改,一步到位
这一章咱们聊聊包管理。说白了,Conda的包管理其实就是四个字:增、删、查、改。我刚开始用Conda时,经常把包装到基础环境里,结果搞得一团糟。后来才养成习惯:先激活环境,再动手操作。你想想看,环境就是你的“工作台”,包就是工具,搞乱了可就麻烦了。
4.1 安装包:从零到一
安装包是最基本操作。我个人习惯用conda install,而不是pip。原因很简单——Conda能帮你自动处理依赖冲突。记得有一次,我在项目中同时需要numpy和tensorflow,pip强制装完版本不兼容,程序直接崩了。换成Conda后,一句命令就搞定。
最基本的安装命令:
conda install numpy
如果你想指定版本:
conda install numpy=1.21.0
从指定渠道安装:
conda install -c conda-forge scipy
安装多个包:
conda install numpy pandas matplotlib
安装本地包文件:
conda install ./my_package-1.0.0.tar.bz2
我的一点经验:安装前先确认环境是否激活。很多新手直接在base环境里装包,结果环境变得巨大。我的习惯是:每个项目单独一个环境,干净又舒心。
避坑指南:我曾经在安装包时忘了指定渠道,结果从默认渠道装了个旧版本,调试两天才发现问题。后来我养成了习惯——装包前先搜一下,确认版本和渠道。
4.2 卸载包:干净利落
卸载包比安装简单,但有个坑要注意。我踩过一回——直接用conda remove numpy,结果一堆依赖也被删了,项目直接跑不起来。
基本卸载命令:
conda remove numpy
卸载多个包:
conda remove numpy pandas
只移除包本身,保留依赖:
conda remove --force numpy
核心:Conda卸载包时会自动处理依赖。如果某个包被其他包依赖,它会提示你。我个人习惯:先看提示再确认,避免误删。
4.3 更新包:保持新鲜
更新包也是个常见操作。但我建议别盲目更新。有一次我在项目中更新了pandas,结果所有数据处理脚本都报错,因为新版本改了几个API。
更新特定包:
conda update numpy
更新环境中所有包:
conda update --all
更新到指定版本:
conda install numpy=1.22.0
我的习惯:生产环境中不要用
conda update --all。万一某个包升级后不兼容,整个项目就挂了。我一般只更新需要的包,而且会先做快照。
避坑指南:我曾经在更新包之前忘了检查锁文件。结果更新后,环境里一堆版本冲突。从那以后,我每次更新前都会用
conda list --export导出一份清单,万一翻车还能回滚。
4.4 搜索包:找到对的它
搜索包是个好习惯。我一般装包前都会搜一下,看看有哪些版本可选,哪个渠道有货。搜索结果能直接告诉你版本号和渠道来源。
搜索包的基本用法:
conda search numpy
搜索特定版本:
conda search numpy=1.21
搜索并显示更多信息:
conda search --info numpy
搜索结果示例:
Loading channels: done
# Name Version Build Channel
numpy 1.21.0 py38h20f2e39_0 pkgs/main
numpy 1.21.0 py39h20f2e39_0 pkgs/main
numpy 1.22.0 py38h20f2e39_0 conda-forge
我个人经验:搜索结果能帮你快速定位到合适的包。比如你看到
py38代表Python 3.8,conda-forge代表社区维护的渠道。版本号后面的数字是构建号,通常选最新那个。
4.5 查看已安装包:心中有数
查看已安装包,我每周都会做一次。一方面确认环境状态,另一方面排查依赖冲突。我经常用conda list看看有没有多余包,顺手清理一下。
查看当前环境的包:
conda list
查看特定格式:
conda list --export
输出结果示例:
# packages in environment at /home/user/miniconda3/envs/myenv
#
# Name Version Build Channel
numpy 1.21.0 py39h20f2e39_0 pkgs/main
pandas 1.3.0 py39h20f2e39_0 pkgs/main
python 3.9.6 h12debd9_1 pkgs/main
查看特定包的信息:
conda list numpy
只看pip安装的包:
conda list | grep pip
| 命令 | 说明 | 常用参数 |
|---|---|---|
conda list |
列出当前环境所有包 | --export导出可复用的格式 |
conda list [pkg] |
查看特定包的版本信息 | 直接跟包名 |
conda list --revisions |
查看环境变更历史 | 配合conda install --revision回滚 |
核心:我经常用
conda list --export导出当前环境包的完整列表。这个列表可以用于复现环境,也能帮你快速定位依赖冲突。
4.6 常用命令总结
我把这些命令整理成了一张表,方便你对照使用。嗯,其实也就这几个操作,你练几遍就能记住。
| 操作 | 命令 | 说明 |
|---|---|---|
| 安装 | conda install |
可以指定版本、渠道、本地文件 |
| 卸载 | conda remove |
自动处理依赖,--force可强制移除 |
| 更新 | conda update |
可更新单个或全部包 |
| 搜索 | conda search |
查看可用版本和渠道 |
| 查看 | conda list |
查看已安装包,--export可导出清单 |
我的小技巧:用
conda list --export导出的文件,可以直接用来复现环境。把内容保存到environment.yml,然后conda env create -f environment.yml就能一键生成一模一样的环境。
注意:包管理操作会影响当前环境。我建议你在每次操作前都激活目标环境,避免误操作到base环境。我曾经在base环境里乱删包,结果导致其他项目环境也受影响。从那以后,我再也不在base环境里做包管理了。