part of mamba-org | ||
---|---|---|
Package Manager mamba | Package Server quetz | Package Builder boa |
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.
It's advised to install mamba from conda-forge. If you already have conda, install mamba into the base environment:
conda install mamba -n base -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).
Now you are ready to install packages with
mamba install xtensor-r -c conda-forge
for example.
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
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
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 reproc-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.
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.
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.).
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.