// CRT MODE ACTIVATED · ↑↑↓↓←→←→BA to toggle
← Writing
Deep Dive

I Installed Anaconda, Miniconda, Mamba, and Conda (They Are Not the Same Thing)

January 28, 20267 min readbeginner
condapythonmambapackaging

I spent most of a summer not understanding the difference between Anaconda, Miniconda, conda, and Mamba. I thought they were competing products, like Coke and Pepsi, and I kept waiting for one to win so I could stop thinking about it.

Turns out that's not how any of this works. They are more like wheels, cars, and engines. Related, nested, and if you pick the wrong combo you end up with a multi-gigabyte install just to run a script that loops over a CSV file.

I made enough mistakes for both of us so you don't have to.

The Part Where I Explain What Conda Actually Is

Conda is not a distribution. It's a package manager and an environment manager, like pip plus venv combined, except it also handles binary dependencies and system libraries. When you install NumPy through conda, it doesn't try to compile it from source on your machine. It grabs a pre-built binary that includes all the C and Fortran libraries NumPy needs. That's why conda exists.

Pip can do that too, sort of, with wheels. But conda was built for the scientific computing world where packages have deep, weird dependency trees. If you have ever tried to pip install something that requires a specific version of HDF5 or CUDA or OpenBLAS, you know the pain conda is solving.

So conda is the engine. Now, what you install that engine inside of is the distribution.

Anaconda: The One That Takes Up Most of Your SSD

Anaconda is a distribution that bundles conda plus hundreds of pre-installed packages. Anaconda's own system requirements ask for "minimum 5 GB disk space to download and install." Five gigabytes, and that is the floor, not the finished size. It includes Pandas, NumPy, Matplotlib, Scikit-learn, Jupyter, and hundreds of other libraries you may or may not ever use.

I installed Anaconda once because a tutorial told me to. The download took forever. The install took forever. It used more disk space than my entire code directory at the time. And when I finally opened it, I had access to libraries I had never heard of and did not need. The experience felt less like setting up a development environment and more like someone handed me the entire kitchen because I asked for a glass of water.

Anaconda has its place. It's good for what it was designed for: someone who wants everything ready immediately, no questions asked. If you're teaching a data science class and every student needs Jupyter, Pandas, and Matplotlib on day one, Anaconda is the right call. The installer is a single download and everything works.

But if you're not that person, if you know what packages you need and you value your disk space, Anaconda is probably overkill.

Miniconda: Just Enough to Be Dangerous

Miniconda is the opposite philosophy. In Anaconda's own words it "installs only conda, Python, and their dependencies into a minimal base environment, with no extra packages and no graphical interface." The stated floor is 400 MB of disk space to download and install. Roughly a twelfth of what Anaconda asks for.

This is what I use now. You install Miniconda, and then you install exactly what you need, one package at a time. It forces you to know your dependencies. That sounds like a chore, but it's a feature. When you explicitly install each package, you understand what your project depends on. Your environment.yml file becomes a real manifest, not a dump of everything that happened to be around.

Miniconda is the right choice for:

  • Production deployments where image size matters
  • Docker containers where every megabyte adds up
  • CI/CD pipelines where you don't want to wait 10 minutes for setup
  • Anyone who already knows what packages they need
  • Machines where disk space is not infinite

The tradeoff is that you do more typing. conda install pandas instead of just having it. That's the whole tradeoff. Worth it.

The Performance Problem Conda Used to Have

There is a reason this article mentions Mamba. The original conda dependency resolver was slow. Not just a little slow. Painfully slow. You would create an environment and go make coffee. Then you would install a package and go check your email. Complex environment files were a lunch-break activity.

Caroline Arnold timed both on the same Linux machine. Installing numpy on its own: 38 seconds for conda, 28 seconds for Mamba. Annoying, but survivable. Then a real environment file with pandas, geopandas, PyTorch, and the CUDA toolkit in it: 10 minutes 51 seconds for conda, 1 minute for Mamba. The gap widens dramatically as the dependency tree gets more complex.

Enter Mamba.

Mamba and the Solver That Changed Everything

Mamba started as a reimplementation of conda's solver using libsolv, a dependency solving library originally built for Linux package managers like RPM. The result was far faster resolution and better error messages.

Here is the twist: Mamba's solver (libmamba) has since been adopted as the default solver in conda itself, starting with conda 23.10.0 in October 2023. So if your conda is up to date, you're already using Mamba's technology under the hood. You don't need to install a separate tool.

But there are still good reasons to use standalone Mamba or its sibling Micromamba.

Mamba (the standalone tool) gives you a drop-in replacement for conda with the same command syntax. You can literally alias conda to mamba in most workflows and forget about it. It also includes extras like repoquery for digging into package metadata.

Micromamba is a single static binary. Not a tiny one: the 2.9.0 release assets run from 11 MB on Windows to 18 MB on Linux x86-64. But it is one file, and it needs no Python and no installation step. You download it and run it. Great for Docker containers because you can add it to a minimal base image without pulling in a full Python distribution.

Miniforge: The One That Puts It All Together

Miniforge is a community-driven distribution that combines the minimal footprint of Miniconda with Mamba pre-installed and conda-forge as the default channel. It's what I recommend to people who ask what to use today.

You get a small install, a fast solver out of the box, and the conda-forge channel by default. That means access to more packages with better maintenance than the default Anaconda channel. And none of the licensing questions that come with Anaconda's commercial terms.

What I Do Now

I install Miniconda. Then I update conda to the latest version so I get the libmamba solver. I use conda-forge as my primary channel. I keep my base environment nearly empty. I create a new environment for every project with an environment.yml file pinned to exact versions.

When I need to build a Docker image, I reach for Micromamba because it adds almost nothing to the image size.

If I were starting from scratch today, I would probably just use Miniforge and skip the extra steps.

This is not exciting advice. Python environment management is a solved problem with a bunch of overlapping tools that serve slightly different niches. The trick is knowing which niche you are in.

Quick Comparison

| Tool | Size | Packages | Best For | |------|------|----------|----------| | Anaconda | 5 GB minimum | Hundreds | Beginners, education, enterprise | | Miniconda | 400 MB minimum | conda + Python + deps | Production, Docker, custom setups | | Mamba (standalone) | varies | varies | Speed, complex deps, CI/CD | | Micromamba | 11 to 18 MB binary | varies | Docker, containers, scripts | | Miniforge | Miniconda-scale | Miniconda's set plus Mamba | Best overall modern setup |

The Thing Nobody Told Me

I spent years thinking I needed to pick one. Anaconda or Miniconda or Mamba or pip or Poetry or whatever the hype cycle was pushing that month. These things are layers in a stack. You pick a distribution (Anaconda or Miniconda or Miniforge) to get conda. Then you use conda (or Mamba as its solver) to manage environments. Then you optionally use pip inside those environments for packages conda doesn't have.

Understanding the layers is more useful than knowing which one to install. Because the answer to "which one should I use" changes depending on what you're doing today. And it's nice to know you can switch without throwing everything away.