mamba header image

The Fast Cross-Platform Package Manager

part of mamba-org
Package Manager mamba Package Server quetz Package Builder boa

mamba

Build Status Join the Gitter Chat docs

Mamba is a reimplementation of the conda package manager in C++.

  • parallel downloading of repository data and package files using multi-threading
  • libsolv for much faster dependency solving, a state of the art library used in the RPM package manager of Red Hat, Fedora and OpenSUSE
  • core parts of mamba are implemented in C++ for maximum efficiency

At the same time, mamba utilize the same command line parser, package installation and deinstallation code and transaction verification routines as conda to stay as compatible as possible.

Mamba is part of a bigger ecosystem to make scientific packaging more sustainable. You can read our announcement blog post. The ecosystem also consists of quetz, an open source conda package server and boa, a fast conda package builder.

Installation

It’s advised to install mamba from conda-forge. If you already have conda:

conda install mamba -c conda-forge

otherwise it’s best to start with Miniconda. If you want to experiment with the latest software, you can also try micromamba (more below).

Installing conda packages with mamba

Now you are ready to install packages with

mamba install xtensor-r -c conda-forge

for example.

Additional features

Mamba comes with features on top of stock conda. To efficiently query repositories and query package dependencies you can use mamba repoquery.

Here are some examples:

mamba repoquery search xtensor will show you all available xtensor packages. You can also specify more constraints on this search query, for example mamba repoquery search "xtensor>=0.18"

mamba repoquery depends xtensor will show you a tree view of the dependencies of xtensor.

$ mamba repoquery depends xtensor

xtensor == 0.21.5
  ├─ libgcc-ng [>=7.3.0]
  │ ├─ _libgcc_mutex [0.1 conda_forge]
  │ └─ _openmp_mutex [>=4.5]
  │   ├─ _libgcc_mutex already visited
  │   └─ libgomp [>=7.3.0]
  │     └─ _libgcc_mutex already visited
  ├─ libstdcxx-ng [>=7.3.0]
  └─ xtl [>=0.6.9,<0.7]
    ├─ libgcc-ng already visited
    └─ libstdcxx-ng already visited

And you can ask for the inverse, which packages depend on some other package (e.g. ipython) using whoneeds.

$ mamba repoquery whoneeds ipython

 Name            Version Build          Channel
──────────────────────────────────────────────────
 ipykernel       5.2.1   py37h43977f1_0 installed
 ipywidgets      7.5.1   py_0           installed
 jupyter_console 6.1.0   py_1           installed

With the --tree (or -t) flag, you can get the same information in a tree.

micromamba

micromamba is a tiny version of the mamba package manager. It is a pure C++ package with a separate command line interface. It can be used to bootstrap environments (as an alternative to miniconda), but it’s currently experimental. The benefit is that it’s very tiny and does not come with a default version of Python.

micromamba works in the bash & zsh shell on Linux & OS X. It’s completely statically linked, which allows you to drop it in some place and just execute it.

Note: it’s advised to use micromamba in containers & CI only.

Download and unzip the executable (from the official conda-forge package):

wget -qO- https://micromamba.snakepit.net/api/micromamba/linux-64/latest | tar -xvj bin/micromamba

We can use ./micromamba shell init ... to initialize a shell (.bashrc) and a new root environment in ~/micromamba:

./bin/micromamba shell init -s bash -p ~/micromamba
source ~/.bashrc

Now you can activate the base environment and install new packages, or create other environments.

Note: currently the -c arguments have to come at the end of the command line.

micromamba activate
micromamba install python=3.6 jupyter -c conda-forge
# or
micromamba create -p /some/new/prefix xtensor -c conda-forge
micromamba activate /some/new/prefix

For more instructions (including OS X) check out https://gist.github.com/wolfv/fe1ea521979973ab1d016d95a589dcde

Development installation

Make sure to have the following requirements in your conda environment:

mamba install cmake compilers pybind11 libsolv libarchive libcurl nlohmann_json pip cpp-filesystem yaml-cpp -c conda-forge

If you build mamba in a different environment than base, you must also install conda in that environment:

mamba install conda -c conda-forge

For a local (dev) build, run pip install -e .. This will build and install mamba in the conda environment.

cmake based build

You will additionally need to install cmake and cli11 for micromamba:

mamba install -c conda-forge cli11 cmake

For the C++ tests, you need Google Tests installed (e.g. mamba install gtest). To build the program using CMake, the following lines need to be used:

mkdir -p build
cd build
cmake .. \
    -DCMAKE_INSTALL_PREFIX=$CONDA_PREFIX \
    -DPYTHON_EXECUTABLE=$CONDA_PREFIX/bin/python3 \
    -DPYTHON_LIBRARIES=$CONDA_PREFIX/lib/libpython3.7m.so \
    -DENABLE_TESTS=ON
cmake --build . -j

This would generate the test program ./test/test_mamba under the build directory which you can execute with make test. To generate the executable micromamba also include the CMake option -DBUILD_EXE=ON in the above step.

Support us

For questions, you can also join us on the QuantStack Chat or on the conda channel (note that this project is not officially affiliated with conda or Anaconda Inc.).

License

We use a shared copyright model that enables all contributors to maintain the copyright on their contributions.

This software is licensed under the BSD-3-Clause license. See the LICENSE file for details.

GitHub

https://github.com/mamba-org/mamba