mamba/micromamba安装和使用

mamba/micromamba install and Setting

Mamba最终要替换conda,就像uv最终替代pip一样

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 web

最开始的时候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包管理器,参考官网进行安装即可

  1. 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
  1. 下载好正常按照exe文件安装即可,要保证文件的完整性
  1. 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
  1. 在下载sh的目录下运行bash文件
bash ~/Miniconda3-latest-MacOSX-arm64.sh
  1. 一路确认,yes即可
  2. 重启之后,刷新一下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)安装都是一样的,在终端输入下面的命令

  1. 下载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"
  1. 运行bash文件
bash Miniforge3-$(uname)-$(uname -m).sh
提示

mamba被合并到miniforge中,更方便用户的安装和使用了

2.3 micromamba 安装

micromamba和mamba是在一起的,mamba被并入了Miniforge中了,但是要 Miniforge distribution >= Miniforge3-23.3.1-0,micromamba是单独安装的,非常的轻量,速度快

  1. 一行命令安装
"${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, ...)
  1. 手动安装

第一步先下载安装包

# 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的条件限制

提示
  1. 确保没有配置 Anaconda 默认通道
  2. 请勿在基础环境中安装任何内容,否则可能会破坏的安装,也就是不要在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

mamba configure

注记

使用优化级的设置,就可以自己选定路径 channels,从CLI输入之后就不会从.condarc读取

3.2 基础概念

  1. 文件/路径的哲学理念

在类 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。
  1. 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 命令)。 当你开另一辆工作车(其他虚拟环境)时,你实际上是把那辆工具车也一起开过来了。虽然你在工作车上干活,但如果你需要修车(管理包),你用的还是工具车上的工具。

  1. micromamba 优势

基本的用法,micromamba,mamba和conda是一样的

micromamba(Mamba 的轻量版)在自动化场景下的一个核心优势:它不需要“激活”环境就能直接使用环境里的工具。

在交互式终端中,我们习惯使用 conda activate myenv 来进入一个环境。这背后其实发生了很多事: - 修改环境变量:Shell 的 PATH 被修改,把环境的 bin 目录加到最前面。 - Shell Hook:Conda/Mamba 注入了一些脚本代码到你的 Shell 里,用来拦截和重写命令

micromamba 的设计哲学是“尽量不做侵入式修改”。配合 shell 和 run 子命令,它可以直接指定环境路径来运行程序,完全跳过了“激活”这一步。

  1. micromamba shell:这个命令的作用是启动一个新的 Shell,并临时进入指定的环境,而不需要手动运行 activate。
  2. micromamba run: 这是最直接的用法。它允许你直接运行某个环境里的可执行文件,而不需要激活环境