mamba/micromamba安装和使用
mamba/micromamba install and Setting
1. 历史发展
1.1 Anaconda的先发
作为一名Python开发者,你是否曾被各种环境管理工具搞得头晕眼花?
- 2010年前:史前时代 - 只有pip,全局安装,依赖冲突是家常便饭
- 2010年:virtualenv诞生 - 首次实现环境隔离
- 2013年:venv成为标准 - Python 3.3内置轻量级环境管理
- 2012年:Conda横空出世 - 为数据科学而生的全能选手
没想到Conda是为了处理数据科学才出现的吧,还是作为Python的背景
Python 在科学计算、数据分析领域日益流行,但存在严重的包依赖冲突、跨平台安装困难(尤其在 Windows 上编译 C 扩展库如 NumPy、SciPy 非常复杂),Anaconda Distribution出现了,Anaconda诞生于2012年,由Continuum Analytics公司(后更名为Anaconda公司)创建并维护。其初衷是为了解决Python在科学计算领域中的环境配置问题,降低数据科学家和开发人员的工作难度。通过集成众多流行的Python库和工具,Anaconda迅速成为数据科学领域的首选工具之一。
2012 年:由 Travis Oliphant(NumPy 和 SciPy 的核心开发者)联合创立 Continuum Analytics(后更名为 Anaconda, Inc.)
- 超过 180 个预装科学计算包(如 NumPy、Pandas、Matplotlib 等)
- 自研的跨语言包/环境管理器 Conda
- 不仅管理 Python 包,还能管理 R、C/C++ 库等
- 支持创建隔离的虚拟环境
- 提供预编译的二进制包,避免本地编译
2015年,由于软件的火爆发展,用户的快速爆发,推出 Anaconda Navigator —— 图形化界面,极大降低新手使用门槛
最开始的时候Anaconda就是大杂烩,后面才加入了现在的
conda命令,从而诞生了软件包仓库,用来方便安装
1.2 Anaconda的托管仓库
anaconda.org(现称为 Anaconda Cloud)是 Anaconda, Inc. 推出的一个包、环境和 notebook 的托管与共享平台,在 Anaconda 生态系统中扮演着“中央仓库 + 协作中心”的角色。其发展历程紧密围绕 Conda 包管理生态的扩展和社区协作需求。
随着conda的流行,用户需要一个平台来
- 分享自己构建的 Conda 包
- 发布自定义频道(channels)
- 共享 Jupyter Notebook 和环境配置
Anaconda Cloud(最初叫 binstar.org)于 2014 年左右上线,后重命名为 anaconda.org。
| 功能 | 说明 |
|---|---|
| 包托管 | 用户可上传 .tar.bz2 格式的 Conda 包或 pip 包 |
| 频道(Channels)系统 | 每个用户/组织拥有自己的频道(如 conda install -c username package) |
| 环境分享 | 可导出 environment.yml 并在线发布,他人一键复现 |
| Notebook 托管 | 支持上传和展示 Jupyter Notebook(类似早期 nbviewer) |
| 公共 vs 私有 | 免费账户支持公开内容;私有仓库需付费 |
著名公共频道
- defaults:Anaconda 官方维护的核心包(安装 Anaconda 时默认启用)包含R,main和msys2
- conda-forge:社区驱动的最大第三方频道(虽托管在 anaconda.org,但由独立社区治理)
- bioconda:专注生物信息学的 Conda 包集合
1.3 Miniconda
Miniconda 的历史是 Anaconda 生态系统为满足轻量化、灵活性和容器化需求而自然演进的产物。它并非一开始就存在,而是随着用户对“精简版 Anaconda”的呼声日益高涨而诞生。
2012 年:Anaconda, Inc.(原 Continuum Analytics)发布 Anaconda Distribution,包含 200+ 预装科学计算包,体积约 500MB–2GB。2014-2015年正式推出了mini版本的Anaconda
- 仅包含 Conda + Python + 必要依赖
- 安装包大小:~50–60 MB(远小于 Anaconda 的数百 MB 至 GB 级)
- 支持 Windows、macOS、Linux
conda-forge现在是最大的channel了,anaconda只是负责提供平台
1.4 Miniforge的中间短暂时代
Miniforge 是一个轻量级、社区驱动的 Conda 发行版,其历史虽短但发展迅速,是 Python 科学生态在 开放性、性能和可移植性 需求推动下的重要产物。它并非由 Anaconda 公司主导,而是由 conda-forge 社区发起并维护。
Conda在2018-2020年的时候,出现了不可避免的问题
- Anaconda, Inc. 宣布对商业用户限制免费使用其 defaults 频道中的部分包(如 NumPy、pandas),要求企业订阅。这促使社区寻求更开放的替代方案。
- 由全球开发者维护的社区频道 conda-forge 已成为最活跃、更新最快的 Conda 包源,且完全开源、无使用限制
- 用户安装Minincoda后,仍需要手动配制 仓库来源非常的繁琐
社区急需一个更快+更open+默认使用conda-forge的发行版–miniforge,所以我们大多数说装conda的时候,实际上装的是miniforge,就是装配好conda-forge的miniconda
1.5 Mambaforge时代
随着软件愈来愈多,AI时代环境要求越来越负责,在创建或更新大型环境时,Conda 的依赖求解器(基于 Python)非常缓慢,有时需数分钟甚至失败。
2019 年:德国 Helmholtz AI 团队的 Wolf Vollprecht 开发了 Mamba。
- 用 C++ 重写依赖求解器(基于 libsolv)
- 完全兼容 Conda 命令(mamba install ≈ conda install,但快 10–100 倍)
- 支持并行下载和智能依赖解析
Mambaforge = Miniconda 的理念 + Mamba 作为默认包管理器 + conda-forge 作为默认频道
🔗 Miniforge 是总称,包含:
- Miniforge3:仅含 Conda + conda-forge
- Mambaforge:含 Mamba + conda-forge(推荐)
现在mamba 已经被包含在miniforge中了,基本上使用mamba就可以平行替代conda
micromamba 是 Mamba 项目的一部分(由 mamba-org 维护),是一个纯 C++ 编写的、无 Python 依赖的 Conda 兼容包管理器。
它的目标:在没有 Python、没有 Conda、甚至没有 shell 的环境中,也能快速创建 Conda 环境。
- 即使 Mamba 很快,但它仍依赖 Python(因为它是 Conda 的替代,而 Conda 本身是 Python 写的)。
- Mamba 团队用 C++ 重写了整个包管理器核心,命名为 micromamba
- 它不依赖 Python,只有一个静态链接的二进制文件(~10–15 MB)
| 特性 | conda |
mamba |
micromamba |
|---|---|---|---|
| 语言 | Python | C++ + Python wrapper | 纯 C++ |
| 依赖 Python? | ✅ 是 | ✅ 是(用于 CLI) | ❌ 否 |
| 二进制大小 | ~100+ MB(含 Python) | ~100+ MB | ~10–15 MB |
| 启动速度 | 慢 | 快 | ⚡ 极快(毫秒级) |
支持 environment.yml? |
✅ | ✅ | ✅(部分) |
| 可独立运行(无 Python)? | ❌ | ❌ | ✅ |
| 适合 Docker? | ❌ | ⚠️ 一般 | ✅✅✅ 最佳 |
随着 Miniforge 23.3.1 版本的发布,Miniforge 和 Mambaforge 安装程序变得完全相同。两者之间唯一的区别是它们的名称,以及随后的默认安装目录。
- 2024年8月:Mambaforge 安装程序将警告关于弃用的信息,并让用户等待 30 秒才能继续。
- 2024年10月:Mambaforge 安装程序将在几个预先指定的日期范围内拒绝安装
- 2025年1月:Mambaforge 安装程序将停止构建和分发
由于历史的原因,mambafroge已经完成了它的使命,被合并到miniforge中,更像是一种“渐进式现代化”:用户无需学习新概念,就自动用上了更快的工具,更熟悉更早的miniforge 站上了舞台。
2. 安装
Anaconda 太笨重了,自行安装界面版进行探索即可,包含了许多其它软件,这里从miniconda安装做起。
2.1 miniconda 安装
miniconda是最重的conda包管理器,参考官网进行安装即可
- Open a Command Prompt window and run the following command:
# 下载exe文件
curl https://repo.anaconda.com/miniconda/Miniconda3-latest-Windows-x86_64.exe --output .\Miniconda3-latest-Windows-x86_64.exe- 下载好正常按照exe文件安装即可,要保证文件的完整性
- Download the .sh installer by opening a terminal and running the following command:
curl -O https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-arm64.sh- 在下载sh的目录下运行bash文件
bash ~/Miniconda3-latest-MacOSX-arm64.sh- 一路确认,yes即可
- 重启之后,刷新一下zshrc/bashrc文件
source ~/.zshrc
2.2 miniforge安装
Miniforge个专门为 conda-forge 打造的 Conda 和 Mamba 最小化安装程序仓库。它包含以下两个预配置特点:
- 基础环境中的软件包都来自 conda-forge 频道。当你安装好这个版本的 Conda 或 Mamba 后,它的基础环境(base environment)里自带的工具(如 Python、conda 本身等)不是从官方默认的渠道下载的,而是从 conda-forge 这个社区频道获取的。
- The conda-forge channel is set as the default (and only) channel.
安装 Miniforge 后,如果无法在普通终端中使用 conda 命令,通常是因为没有激活 conda 的环境。你需要运行 conda init 命令来完成 shell 的配置,让 conda 命令对所有终端可见。
Unix-like platforms (macOS, Linux, & WSL)安装都是一样的,在终端输入下面的命令
- 下载bash文件
# 使用curl
curl -L -O "https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-$(uname)-$(uname -m).sh"
# 使用wget
wget "https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-$(uname)-$(uname -m).sh"- 运行bash文件
bash Miniforge3-$(uname)-$(uname -m).shmamba被合并到miniforge中,更方便用户的安装和使用了
2.3 micromamba 安装
micromamba和mamba是在一起的,mamba被并入了Miniforge中了,但是要 Miniforge distribution >= Miniforge3-23.3.1-0,micromamba是单独安装的,非常的轻量,速度快
- 一行命令安装
"${SHELL}" <(curl -L micro.mamba.pm/install.sh)Invoke-Expression ((Invoke-WebRequest -Uri https://micro.mamba.pm/install.ps1 -UseBasicParsing).Content)输入几个文件夹,bash,conda-forge和名称确认即可完成安装!然后感受micromamba的速度吧
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- 0:00:02 --:--:-- 0
100 3059 100 3059 0 0 826 0 0:00:03 0:00:03 --:--:-- 8179
Micromamba binary folder? [~/.local/bin]
Init shell (bash)? [Y/n] y
Configure conda-forge? [Y/n] y
Prefix location? [~/micromamba]
Running `shell init`, which:
- modifies RC file: "/home/erwin/.bashrc"
- generates config for root prefix: "/home/erwin/micromamba"
- sets mamba executable to: "/home/erwin/.local/bin/micromamba"
The following has been added in your "/home/erwin/.bashrc" file
# >>> mamba initialize >>>
# !! Contents within this block are managed by 'micromamba shell init' !!
export MAMBA_EXE='/home/erwin/.local/bin/micromamba';
export MAMBA_ROOT_PREFIX='/home/erwin/micromamba';
__mamba_setup="$("$MAMBA_EXE" shell hook --shell bash --root-prefix "$MAMBA_ROOT_PREFIX" 2> /dev/null)"
if [ $? -eq 0 ]; then
eval "$__mamba_setup"
else
alias micromamba="$MAMBA_EXE" # Fallback on help from micromamba activate
fi
unset __mamba_setup
# <<< mamba initialize <<<
Please restart your shell to activate micromamba or run the following:\n
source ~/.bashrc (or ~/.zshrc, ~/.xonshrc, ~/.config/fish/config.fish, ...)- 手动安装
第一步先下载安装包
# Linux Intel (x86_64):
curl -Ls https://micro.mamba.pm/api/micromamba/linux-64/latest | tar -xvj bin/micromamba
# Linux ARM64:
curl -Ls https://micro.mamba.pm/api/micromamba/linux-aarch64/latest | tar -xvj bin/micromamba
# Linux Power:
curl -Ls https://micro.mamba.pm/api/micromamba/linux-ppc64le/latest | tar -xvj bin/micromamba
# macOS Intel (x86_64):
curl -Ls https://micro.mamba.pm/api/micromamba/osx-64/latest | tar -xvj bin/micromamba
# macOS Silicon/M1 (ARM64):
curl -Ls https://micro.mamba.pm/api/micromamba/osx-arm64/latest | tar -xvj bin/micromamba第二步After extraction is completed, we can use the micromamba binary.
如果你想快速使用,If you want to quickly use micromamba in an ad-hoc usecase, you can run
export MAMBA_ROOT_PREFIX=/some/prefix # optional, defaults to ~/micromamba
eval "$(./bin/micromamba shell hook -s posix)"也可以使用brew进行一键安装
brew install micromamba
3. 设置
3.1 基础设置
因为mamba/micromamba 已经是使用开源的conda-forge作为主要的来源了,再加上Ananconda的条件限制
- 确保没有配置 Anaconda 默认通道
- 请勿在基础环境中安装任何内容,否则可能会破坏的安装,也就是不要在
base环境中安装
现在的 mamba 命令行工具,在运行时仍然依赖 conda 的配置和环境。
- 它会读取
~/.condarc配置文件 - 它在某些操作上(如激活环境 conda activate)实际上会调用底层的
conda代码。 - 本质:mamba 是 conda 的一个“加速器”,它替换了 conda 中最慢的依赖解析部分,但仍然运行在 conda 的生态系统之上。
micromamba
libmamba是一个 C++ 库,而 micromamba 和 rhumba 是基于这个库构建的独立工具。
- libmamba:是 mamba 项目的核心引擎,用 C++ 编写,负责高速依赖解析。
- micromamba:是一个独立的可执行文件(静态二进制),完全由 libmamba 驱动,不依赖 Python。
mamba(以及 conda)这个工具从哪里读取配置,以及当同一个配置出现在多个地方时,它会听谁的。
- rc (“run control) file: a file using YAML syntax
- environment variable: a key/value pair set prior to mamba execution 环境变量,在 mamba 执行前设置的键值对
- CLI: a parsed argument/option from a CLI interface 命令行接口(CLI)参数,从命令行界面解析出的参数或选项
- API: a value set programmatically by a program relying on mamba
使用优化级的设置,就可以自己选定路径 channels,从CLI输入之后就不会从.condarc读取
3.2 基础概念
- 文件/路径的哲学理念
在类 Unix 平台中,安装软件本质上就是将文件放置到一个“安装前缀目录”的各个子目录中。
installation prefix” 是理解整个 Unix 软件生态的关键。它通常指的是 /usr、/usr/local 或者像 Mamba 这样的包管理器使用的自定义路径(如 /home/user/mambaforge)。
Linux的理念就是一切皆文件
- 可执行文件:放入bin/目录
- 库文件:放入lib/目录
- 共享数据:放入share/目录
Mamba/Conda 的核心机制就是管理这些“前缀”
- 当你创建一个新的 Conda 环境(如 mamba create -n myenv)时,Mamba 实际上是创建了一个新的前缀目录(例如 ~/mambaforge/envs/myenv)
- 当你安装软件(如 mamba install numpy)时,Mamba 会把 Numpy 的文件解压并放置到这个环境目录(前缀)下的 lib/python3.9/site-packages/ 等子目录中。
- 当你激活环境时,Mamba 会把该环境的 bin 目录临时加到你的 PATH 环境变量最前面,这样你输入 python 时,系统就会优先使用这个环境里的 Python,而不是系统的 Python。
- mamba缓存机制和目录结构
📦 缓存机制:加速操作
当你第一次使用 Mamba 安装软件时,它会做两件事,这两件事都会产生缓存,避免重复下载:
- 索引缓存:Mamba 会先下载“软件包列表”(即频道里的 repodata.json)。这个列表有生存时间。在生存时间内,Mamba 会直接使用本地的列表,不会去网上检查更新,从而加快 search 或 install 命令的响应速度。
- 包文件缓存:下载下来的软件包(.tar.bz2 或 .conda 文件)会被存放在本地。为了节省磁盘空间,Mamba 会优先使用硬链接技术。这意味着,即使你在 5 个不同的环境中都安装了 numpy,硬盘上实际上只存了一份 numpy 的文件,其他环境只是“指向”这份文件的链接。
📁 根前缀:统一的管理中枢
这里的 Root Prefix 是理解这一切的关键。它就像是一个总指挥部
- 共享缓存:所有使用同一个 Root Prefix 的环境,都会共享同一个缓存目录 ($root_prefix/pkgs/)。这非常高效,因为大家共用一套下载好的文件,不需要每个环境都存一份副本。
- 环境存放:Root Prefix 下通常还有一个默认的 envs 文件夹 ($root_prefix/envs/)。如果你创建环境时不指定路径,环境就会默认建在这里。
所以base环境本身就是~/mamba目录本身,而不是~/mamba/envs的某个子目录
想象 Base 环境是一辆工具车,它上面装满了修车工具(mamba 命令)。 当你开另一辆工作车(其他虚拟环境)时,你实际上是把那辆工具车也一起开过来了。虽然你在工作车上干活,但如果你需要修车(管理包),你用的还是工具车上的工具。
- micromamba 优势
基本的用法,micromamba,mamba和conda是一样的
micromamba(Mamba 的轻量版)在自动化场景下的一个核心优势:它不需要“激活”环境就能直接使用环境里的工具。
在交互式终端中,我们习惯使用 conda activate myenv 来进入一个环境。这背后其实发生了很多事: - 修改环境变量:Shell 的 PATH 被修改,把环境的 bin 目录加到最前面。 - Shell Hook:Conda/Mamba 注入了一些脚本代码到你的 Shell 里,用来拦截和重写命令
micromamba 的设计哲学是“尽量不做侵入式修改”。配合 shell 和 run 子命令,它可以直接指定环境路径来运行程序,完全跳过了“激活”这一步。
- micromamba shell:这个命令的作用是启动一个新的 Shell,并临时进入指定的环境,而不需要手动运行 activate。
- micromamba run: 这是最直接的用法。它允许你直接运行某个环境里的可执行文件,而不需要激活环境