news 2026/10/1 10:29:11

Ubuntu上Miniconda完全指南:安装、使用与卸载避坑实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Ubuntu上Miniconda完全指南:安装、使用与卸载避坑实践

在一台刚装好的 Ubuntu 上,系统自带的 Python 版本往往是“跟着系统发行版走”的,版本老化、无法随意升级倒也罢了,最难受的是多个项目分别需要不同版本的 Python 和依赖包,最后全挤在一个环境里,谁也不敢动。我第一次认真折腾 conda,就是被这种混乱逼着的:项目 A 要 numpy 老版本,项目 B 要新版本,系统里还有软件依赖旧版 libssl,一升级直接崩掉。后来换到 Miniconda,才发现很多 Python 环境问题,本质上是“把项目运行环境”和“系统包”彻底分开的问题。

Miniconda 是一个轻量级 Python 环境与包管理工具,也是 Anaconda 的精简替代品,默认只带 conda、一个 Python 解释器和最小依赖。它最常用的场景就是:在 Ubuntu 等 Linux 发行版上,不污染系统 Python,按项目独立创建 Python 版本和包环境,并且装完不想要了能整目录删除。这篇东西不打算写成官方案例的翻译稿,而是我在 Ubuntu 上安装、使用、卸载 Miniconda 的完整过程记录,包括每一步背后的原因、需要避开的坑,以及我踩过之后才总结出来的检查习惯。

1. 为什么选 Miniconda:装之前先想清楚这几点

1.1 Anaconda 和 Miniconda,到底差在哪

先说一个最常被问到的问题:Anaconda 和 Miniconda 有什么区别,是不是直接装 Anaconda 一步到位更好?

其实这两个东西的核心引擎都是 conda,也就是说它们的虚拟环境管理能力、依赖解析逻辑和默认仓库机制,几乎是一模一样的。真正的区别只在于“开箱预装了多少东西”。Anaconda 会把 numpy、pandas、scipy、jupyter 这一整桌数据科学常用的软件全部打包带进来,安装体积动辄好几个 G;Miniconda 则只给你 conda、Python 解释器和最基本的底层依赖,其他包以后需要哪个再装哪个。

对比项AnacondaMiniconda
默认预装包数据科学全家桶,几百个包只包含 conda、Python 和极少数基础组件
安装后体积通常几个 GB,比较占磁盘通常几百 MB,轻量
虚拟环境管理支持,核心是 conda支持,核心同样是 conda
适用场景懒得装包、离线内网部署、教学演示自控环境、服务器、Docker 镜像、喜欢干净目录的人

我个人几乎总是选 Miniconda。原因很简单:Anaconda 预装的很多包,在真实项目里未必用得上。用不到的包宁可不用不装,这样既能避免项目依赖之间的潜在冲突,也方便日后一次性卸载。如果你只是需要一个环境管理器,Miniconda 已经是完整答案,Anaconda 的“全家桶”优势反而变成了冗余。

还有一个关键特性值得注意:Miniconda 默认安装在你自己的用户目录下,不需要 sudo,不会去动/usr/bin/python。系统里的其他软件照常使用系统 Python,你通过 conda 创建出来的虚拟环境则归当前用户管。两套 Python 互不打扰,这就是用 conda 类工具管理环境的最大价值。

1.2 什么时候用 Miniconda,什么时候别硬上

安装之前,我更建议你停下来想一个问题:你真的需要 Miniconda 吗?

如果你的需求只是写一个几十行的小脚本,系统自带 Python 就已经够用,没必要为它引入一套环境管理工具。如果你的项目只会用到同一个 Python 版本,只是担心包装乱了,python3 -m venv这种自带方案也能完成环境隔离,而且更轻、更没有额外学习成本。但如果你需要同时切 Python 3.9、3.10、3.12,或者项目间的依赖相互冲突,又或者你在做数据分析、机器学习,需要统一管理 numpy、pandas、libssl、CUDA 这类二进制依赖,那 Miniconda 就非常合适。

conda 的长板是把“Python 版本管理”和“包管理”放在一起解决。单纯用 venv 做不了多版本切换,单纯用 pyenv 又不管包依赖,Miniconda 相当于是把这两件事合并成一套命令。代价是它的学习曲线比 venv 略高,而且对刚接触 Linux 的同学来说,容易因为 PATH 和 shell 初始化的问题搞得满头雾水。这也是我坚持要先讲选型的原因:很多安装教程默认你非装不可,但现实里,想清楚需求再动手,能省下后面大量卸载和排查的时间。

2. 在 Ubuntu 上装 Miniconda:从下载到初始化一次走通

2.1 装之前先做环境检查,别急着执行脚本

拿到一台 Ubuntu 机器,不管你是全新装的系统还是已有开发环境,我都会先做两件事:确认系统架构、确认目前的用户目录环境。

cat /etc/os-release uname -m

/etc/os-release能看发行版版本,不过 Ubuntu 20.04、22.04、24.04 在我的实际操作里安装流程差别不大,有些老教程里特有的依赖问题在新版本反而少了。真正要紧的是uname -m,它决定了你要下载哪个架构的安装脚本。绝大多数 PC、服务器和虚拟机是x86_64,对应官方脚本里的Linux-x86_64;树莓派、部分 ARM 服务器则是aarch64,需要下载Linux-aarch64版本。这个看错就是白忙,执行时大概率直接报Exec format error。

接下来是下载安装脚本。我比较推荐从 Miniconda 官网下载页找最新地址,然后复制到终端里用 wget 拉取:

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

如果下载速度不太理想,国内也有不少开源软件镜像站同步了 Miniconda 安装包,找一个你网络条件好的镜像也能用,校验逻辑完全一样。但不管从哪下载,我都建议做一次 SHA-256 校验,跟官方页面上给的哈希值对一下:

sha256sum Miniconda3-latest-Linux-x86_64.sh

这一步看起来多余,但安装脚本会往你的 shell 配置文件里写入内容,如果下载环节出了问题,后面排查会非常痛苦。我在实际部署中见过因为下载不完整导致安装到一半报错的例子,所以我宁可多花十几秒。

另外,虽然 Miniconda 安装本身不依赖系统包更新,但如果你的机器很久没apt upgrade过,我会顺手先执行一次:

sudo apt update && sudo apt upgrade -y

这不是必须,但可以规避一些系统库版本过老导致 conda 里的二进制包装上后运行异常的情况。装环境管理工具之前,先把系统底座打理好,属于性价比很高的习惯。

2.2 运行安装脚本:交互模式和无人值守模式怎么选

下载好的脚本默认没有执行权限,但用bash调用它就行,不一定非得chmod +x。我最常用的是无人值守模式:

bash Miniconda3-latest-Linux-x86_64.sh -b -p "$HOME/miniconda3"

这里-b表示 batch 模式,安装过程不向你提问,也不做 shell 初始化;-p是指定安装路径。安装到当前用户的 home 目录下是最省心的做法,以后不需要 root 权限,卸载时也只要删这个目录。

如果你选择直接交互安装,比如:

bash Miniconda3-latest-Linux-x86_64.sh

那么流程是这样的:先按 Enter 向下翻完许可协议,在Do you accept the license terms? [yes|no]这里输入yes。接着会问安装位置,直接按回车就是默认路径,也可以改成你自定义的目录。最后一步会问是否运行conda init来初始化 shell,这里建议选yes。

我个人的经验是:第一次折腾的人用交互模式能更清楚安装过程,但如果你已经打算写自动化脚本批量装,或者怕自己手滑,直接上-b -p最稳。batch 模式装完需要手动执行一次conda init,这会在下一部分详细说。

还要提醒一点:安装路径里别用中文、别带空格,否则后面 shell 解析和环境变量处理会很麻烦。路径也建议固定下来,不要装完没几天又换地方,因为 conda 的初始化块里写的是绝对路径,迁移目录会破坏已有的 shell 配置,还得重新 init 一遍。

2.3 安装后的 Shell 初始化:conda 命令为什么还是找不到

无论你是交互安装选 yes,还是 batch 安装后手动执行,壳的初始化都是最关键的一步。Miniconda 安装完成后,conda命令的可执行文件其实已经躺在安装目录的bin下面了,但你的 shell 不知道去哪里找它,所以新开终端时经常出现conda: command not found。

如果是交互安装且最后选了 yes,脚本已经自动往~/.bashrc里写入了 conda 初始化块,你只需要让这个配置生效:

source ~/.bashrc

如果你是 batch 装完的,就用完整路径手动执行初始化:

"$HOME/miniconda3/bin/conda" init bash source ~/.bashrc

如果你默认 shell 是 zsh,把bash换成zsh,然后执行source ~/.zshrc。不少人在 macOS 或配置了 oh-my-zsh 的 Ubuntu 上装完,发现新终端还是找不到 conda,就是因为只按 bash 教程里写的source ~/.bashrc操作,忘了自己的 shell 根本不是 bash。

这里我想强调一个反直觉的点:不建议手动往~/.bashrc里加export PATH="$HOME/miniconda3/bin:$PATH"。原因是 conda 从 4.6 版本开始,conda activate的功能依赖它在启动文件里写入的“初始化块”,这个初始化块不只是改 PATH,还负责加载 shell 函数。如果你只手动加 PATH,which conda也许能找到,但一执行conda activate就可能报错:CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'。网上不少老教程还在用手动 export 的写法,但官方推荐的conda init方式才更适合卸载时做全自动反向清理。

3. 装完不算完:验证、常用命令和 pip/conda 选型

3.1 第一次验证:conda、python、环境列表都要看

安装完之后,别急着去建环境,先做三分钟验证,确认你真的把“命令入口”和“默认 Python 指针”切到了 Miniconda 上。新开一个终端,或者先source ~/.bashrc,然后依次执行:

which conda conda --version which python python --version conda env list

正常情况下,which conda应该输出/home/你的用户名/miniconda3/bin/conda,which python应该输出/home/你的用户名/miniconda3/bin/python。如果which python仍然指向/usr/bin/python,说明 shell 初始化没有生效,或者被其他配置文件里的 PATH 设置抢先了。

conda env list会列出当前所有环境,刚装完时只有一个base,路径就在安装目录。base 是 conda 自带的基础环境,你可以像普通 Python 环境一样用它,但我更建议日常干活时单独创建项目环境,不要长期赖在 base 里装一堆包,这样可以减少环境之间互相污染的概率。

还有一个小配置,很多人没注意但在实际工作中很有用:

conda config --set auto_activate_base false

默认情况下,新开终端会自动激活 base,你一打开终端,python就已经是 Miniconda 的 Python。如果你暂时没项目要跑,这个行为会让一些系统脚本误以为当前 Python 环境变了。关掉 auto_activate_base 之后,终端默认不进入任何 conda 环境,你需要哪个环境就手动conda activate哪个。这个设置不会影响 conda 命令本身的可用性,只是让环境激活变得更受控。

3.2 conda install 还是 pip install:这里面的门道不少

用 Miniconda 之后,很多人会问:装包到底用conda install还是pip install?我的总结就一句话:能用 conda 装的就优先用 conda,conda 仓库里找不到的再考虑 pip,但 pip 必须在目标环境激活之后再用。

为什么优先 conda?conda 不只是管 Python 包,它还会处理非 Python 的系统依赖。比如你要装gdal、libxml2、cudatoolkit这类涉及底层库的包,conda 会把配套的二进制依赖一起解析出来,pip 有时候管不到这么深。另一个优势是 conda 的环境卸载比较利落,包信息集中在环境目录里,你conda env remove删除环境时,它能把这些包产生的文件清得干净。

但 pip 也不可替代,PyPI 上的纯 Python 包经常比 conda 仓库更新得更快、更全。实践中我的流程通常是:先conda activate 项目环境,再通过conda install装核心依赖,如果某个包 conda 仓库没有,就切换到 pip:

conda activate myproject conda install numpy pandas pip install some-python-package

这里最关键的检查是确认 pip 指向哪个环境:

which pip

如果你已经激活了myproject环境,正确的输出应该是/home/你的用户名/miniconda3/envs/myproject/bin/pip。如果它显示/usr/bin/pip,那说明环境激活没生效,或者你还停留在系统 Python 里。这时候 pip 安装的包会进系统 Python,conda 环境根本看不到,这就是很多人“明明装成功了,但 conda list 里查不到”的原因。

3.3 一个干净的最小虚拟环境怎么搭

第一次建虚拟环境,我建议按最小化原则来,不要一次性装一堆包。演示一下我常用的流程:

conda create -n demo python=3.11 -y conda activate demo conda install numpy pandas -y

conda create的-n指定环境名,python=3.11指定这个环境里的 Python 版本。这一步很惊人,因为它会在几分钟内为你拉一个独立的 Python 3.11 解释器,完全不影响系统里其他 Python。-y是跳过安装确认,否则它会在每个命令后停下来问你一遍。

如果你需要 conda 默认仓库之外的包,可以单独在命令里指定 channel:

conda install -c conda-forge jupyter

conda-forge是社区维护的良好 channel,很多包在默认仓库里没有最新版本。但注意别一把梭地堆很多 channel,加的源越多,依赖解析时间越长,也越容易触发 channel 之间的优先级问题。配置完环境之后,想确认当前环境的包列表,直接执行conda list;想退出环境,用conda deactivate。

4. 卸载 Miniconda:别急着删目录,先想清楚这几步

4.1 卸载前先退环境和清理缓存

Miniconda 的卸载比普通软件麻烦点,因为它会修改 shell 启动文件。我见过不少人图省事直接rm -rf ~/miniconda3,后果就是终端里残留一堆报错。正确顺序应该是“先反初始化 shell,再删除文件,最后检查残留”。

先退出当前所有 conda 环境,回到普通 shell:

conda deactivate

如果以前创建了很多项目环境,建议先想清楚要不要留备份。可以导出每个环境的依赖清单:

conda env export -n myproject > myproject.yaml

以后哪怕彻底删除了 miniconda,只要保留这份 yaml,换台机器也能重建一份差不多的环境。如果确定所有环境都不再需要,不一个个conda env remove也行,因为删除整个安装目录会把环境一起带走,但逐个删能让操作更可控。接着清理 conda 的缓存包:

conda clean --all -y

这个命令会清掉下载缓存的安装包、索引缓存和临时文件。它本身不影响环境,但能减小目录体积,也让后面的卸载过程不再多花时间扫垃圾。

4.2 反初始化与删除安装目录

这是我在卸载过程中最看重的步骤。先执行反初始化:

conda init --reverse --all

如果 conda 命令已经不在当前 PATH 里,就用完整路径调用:

"$HOME/miniconda3/bin/conda" init --reverse --all

conda init --reverse会把之前往 shell 启动文件里写入的 conda 初始化块整段移除,--all表示对所有 shell 类型都做反初始化。为什么这一步要在删目录之前做?因为反初始化需要 conda 命令还能正常执行;如果你先把~/miniconda3删了,这个命令就没了,只能手动到.bashrc、.zshrc、.profile里一段一段找着删,非常容易漏。

做完反初始化后,再删除安装目录。默认路径是~/miniconda3,如果你当初自定义过路径,就删你自己定义的那个。执行前先确认一下路径没有写错:

ls -ld ~/miniconda3 rm -rf ~/miniconda3

rm -rf是一个危险命令,这条命令只在确认路径正确时再用。用的时候不要图省事写成rm -rf ~/miniconda*,万一目录名拼写不同,可能会误删别的东西。

4.3 残留的配置文件怎么清

删除安装目录后,还剩下一些隐藏配置文件和状态目录。这部分不清理的话,表面看已经卸载干净了,但以后重装 Miniconda 时,老配置会影响新环境。

常见残留路径有这么几个:

~/.condarc ~/.conda ~/.config/conda

~/.condarc是 conda 的配置文件,里面可能包含你手动添加的 channel 地址、代理设置、默认安装路径等信息。如果只是想卸载,这个文件可以删掉。~/.conda和~/.config/conda里则是一些历史记录和缓存。删除它们不会影响系统其他软件,只是让 conda 的存在感彻底归零。

如果你想重装 Miniconda,我更建议把这些残留都清掉,因为旧配置里的 channel 优先级和 pkgs_dirs 会让新环境表现得“不像全新安装”,排查问题时容易产生误解。

4.4 卸载后的整体检查清单

删完之后,打开一个新终端,做一遍整体检查:

which conda echo $PATH | tr ':' '\n' | grep -i -E 'conda|anaconda'

which conda如果没有任何输出,说明命令入口已经不在当前 shell 的可执行路径里了。第二条命令是检查 PATH 里是否仍然残留 miniconda 的路径。如果你当初手动往启动文件里加过 export PATH,这一项会查出来,必须手动把对应行删掉。

还有一个常被忽略的细节是 shell 的命令哈希缓存。如果当前终端在卸载前已经执行过 conda 命令,bash 会缓存它对应的路径。卸载后输入 conda,有些老 shell 会话可能仍尝试去找缓存路径。解决办法是执行一次:

hash -r

或者干脆关掉终端再重新开一个。最后再确认一下,.bashrc、.zshrc、.profile里没有残留conda initialize相关的配置块。如果你是用conda init --reverse正确反初始化的,这里应该是干净的;如果还有残留,手动删掉从>>> conda initialize >>>到<<< conda initialize <<<之间的整段内容。

5. 安装卸载中的高频问题与我的排查思路

5.1 一张速查表,先对号入座

把我在 Ubuntu 上安装和卸载 Miniconda 过程中遇到的高频问题整理成了一张速查表。遇到问题时,先判断现象属于哪一类,再结合后面的排查步骤处理。

现象可能原因处理办法
安装后 bash 里输入 conda 提示 command not found没 source 启动文件,或 batch 安装后没执行 conda init执行 source ~/.bashrc,没初始化块就运行安装目录下 bin/conda init bash
conda activate 报 CommandNotFoundErrorshell 没有正确初始化 conda,常见于手动只加 PATH执行 conda init bash,然后重启终端
安装脚本报 Exec format error架构下载错了,ARM 机器下载了 x86_64 脚本uname -m 确认架构,重新下载对应 aarch64 版本
重新执行安装脚本提示目录已存在旧 Miniconda 还在,或上次安装没清干净先 conda init --reverse,再删旧目录,然后重装;也可用 -u 参数覆盖更新
pip install 成功但 conda list 里找不到pip 装到了系统 Python 或未激活目标环境conda activate 后确认 which pip,再重新安装
用 sh 执行安装脚本出现语法错误安装脚本是 bash 脚本,sh 与 bash 并不完全一致用 bash Miniconda3-xxx.sh 执行,不要用 sh
sudo conda 提示命令找不到conda 装在普通用户目录,sudo 下 PATH 变了不要用 sudo 运行 conda,conda 也不需要 root 权限
卸载后新终端启动变慢或有报错提示初始化块没清干净,shell 仍在找已删除路径检查 rc 文件里的 conda initialize 段,手动删除

这张表不覆盖所有可能,但覆盖了绝大多数“装不上、装完找不到、卸不干净”的情况。遇到问题时,我一般不会先怀疑软件本身,而是先检查 shell 和 PATH,因为 Miniconda 的安装和卸载本质上都在改这两个地方。

5.2 三个我实际踩过的坑和解决过程

第一个坑是第一次交互安装时手误。我记得那会儿刚接触 Ubuntu,跑安装脚本后翻完协议,手一滑没输 yes 就按了回车,安装直接退出。重新执行时又提示目录不为空,我当时以为只能删掉重来,白白折腾了十几分钟。后来才知道 Miniconda 安装脚本支持-u参数做覆盖更新,不需要先删目录。如果只是安装中断想重来,直接bash Miniconda3.sh -u是更省事的路径。但如果你是彻底换版本,那我还是会先反初始化再删目录,避免新旧配置混在一起。

第二个坑是 zsh 用户专属。有一台机器我配置了 oh-my-zsh 作为默认 shell,按 bash 教程装完 Miniconda,发现新终端仍然看不到 conda 命令。折腾半天才发现,交互安装脚本检测到当前 shell 是 zsh,会把初始化配置写进~/.zshrc,而不是~/.bashrc。我一开始只 source 了~/.bashrc,自然什么效果都没有。正确做法是装完以后执行source ~/.zshrc,或者更稳一点,直接跑一次~/miniconda3/bin/conda init zsh,让它重新写一遍 zsh 的初始化块。

第三个坑,也是我最想分享的一个经验,就是卸载顺序。有一回为了赶时间,我没做任何反初始化操作,直接rm -rf ~/miniconda3删完了事。结果之后每次打开终端,出现了几行错误提示,说找不到/home/用户名/miniconda3/bin/conda。因为 shell 启动文件里的初始化块还在,它仍然尝试加载一个已经不存在的路径。那次我只能手工编辑了.bashrc、.zshrc和.profile三个文件,一段段找 conda 相关的残块删掉,比正常卸载多花了好几倍时间。从那以后我的卸载流程固定为:先conda deactivate,再conda clean --all,然后conda init --reverse --all,最后才删目录。

最后说一个我自己的使用习惯:每次在一台新 Ubuntu 上装 Miniconda 之前,我都会建一个专门的~/downloads目录,把安装脚本和官方页面上的 SHA-256 哈希值一起存一份;装完之后,先主动跑一次conda init --reverse,确认反初始化流程能正常执行,再重新conda init恢复回来。这个测试看着多此一举,但它能确保我记住卸载路径和反注册方法,等真到卸载那天,不会因为记不清安装路径而手忙脚乱。折腾环境管理工具这件事,本质上是在管理不确定性。把 Python、依赖包和系统三个层次分开,让它们各管各的,后续维护会轻松很多。希望这篇记录能帮你在安装、使用、卸载 Miniconda 这条路子上,少走几个我当年绕过的弯路。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/1 10:28:48

DeepSeek LeetCode 137.不出现一次的数字|| C语言实现

LeetCode 137 是 只出现一次的数字 II&#xff1a;数组中除某个元素只出现一次外&#xff0c;其余元素都出现三次&#xff0c;要求找出这个元素。 C 语言实现&#xff08;位运算状态机&#xff0c;推荐&#xff09; int singleNumber(int* nums, int numsSize) {int ones 0; /…

作者头像 李华
网站建设 2026/10/1 10:28:40

GitHub周榜怎么刷才有价值:从挑项目到跑通全流程指南

1. GitHub 周榜是什么&#xff0c;为什么值得每周刷每周一打开 GitHub 热榜项目页面&#xff0c;第一件事就是看看这周的“周榜”又换了哪些新面孔。对&#xff0c;就是那个记录了近 7 天里 star 增长最快、讨论最热、被 fork 最多的开源项目榜单&#xff0c;2026-09-27 这一期…

作者头像 李华
网站建设 2026/10/1 10:28:34

风格化渲染系统:可编程的视觉语法翻译器

1. 什么是风格化渲染系统&#xff1a;它不是滤镜&#xff0c;而是视觉语言的翻译器“一个风格化渲染系统”——这七个字乍看抽象&#xff0c;但拆开来看&#xff0c;每个词都踩在当下数字内容生产的核心痛点上。风格化&#xff0c;不是简单加个美颜或套个预设滤镜&#xff0c;而…

作者头像 李华
网站建设 2026/10/1 10:28:14

我们花了半年把 Oracle 迁走了,值吗?

一、为什么要迁&#xff1f;说实话&#xff0c;最初的触发点很现实&#xff1a;续费通知。Oracle 的 License 续费单发过来那一刻&#xff0c;财务和 IT 负责人同时沉默了几秒。不是第一次见到这个数字&#xff0c;但这一次&#xff0c;会议室里有人第一次认真说出那句话&#…

作者头像 李华
网站建设 2026/10/1 10:26:35

端侧AI落地九大约束与八维评测:横切思维下的权衡法则

端侧AI这两年从PPT概念一路卷到真机落地&#xff0c;我身边做嵌入式、做算法、做产品的朋友几乎都在同一个坑里反复摔跤&#xff1a;模型在服务器上跑得漂漂亮亮&#xff0c;一塞进手机、手表、车机、摄像头&#xff0c;精度掉、延迟炸、发热烫、内存爆&#xff0c;最后只能砍功…

作者头像 李华