Skip to content

Instantly share code, notes, and snippets.

@wolfv
Last active October 15, 2024 09:05
Show Gist options
  • Save wolfv/fe1ea521979973ab1d016d95a589dcde to your computer and use it in GitHub Desktop.
Save wolfv/fe1ea521979973ab1d016d95a589dcde to your computer and use it in GitHub Desktop.
micromamba usage

Installation

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

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 --strip-components=1

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

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

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

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

OS X

Micromamba has OS X support as well. Instructions are largely the same:

curl -Ls https://micromamba.snakepit.net/api/micromamba/osx-64/latest | tar -xvj bin/micromamba
mv bin/micromamba ./micromamba
./micromamba shell init -s zsh -p ~/micromamba
source ~/.zshrc
micromamba activate
micromamba install python=3.6 jupyter -c conda-forge

ARM 64 and PPC support

There are packages for micromamba available for ARM 64 and PPC. Just use the Linux instructions and exchange the package with the one found on anaconda.org.

Windows

Micromamba also has Windows support! For Windows, we recommend powershell. Below are the commands to get micromamba installed.

Invoke-Webrequest -URI https://micromamba.snakepit.net/api/micromamba/win-64/latest -OutFile micromamba.tar.bz2
C:\PROGRA~1\7-Zip\7z.exe x micromamba.tar.bz2 -aoa
C:\PROGRA~1\7-Zip\7z.exe x micromamba.tar -ttar -aoa -r Library\bin\micromamba.exe
$Env:MAMBA_ROOT_PREFIX=(Join-Path -Path $HOME -ChildPath micromamba)
$Env:MAMBA_EXE=(Join-Path -Path (Get-Location) -ChildPath micromamba.exe)
.\micromamba.exe create -f ./test/env_win.yaml -y

API

We should soon figure out an automated process to use the latest version of micromamba. We can use the anaconda api: https://api.anaconda.org/release/conda-forge/micromamba/latest to find all the latest packages, we just need to select the one for the right platform.

name: CI
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
test_shells:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest]
steps:
- uses: actions/checkout@v2
- name: install micromamba
run: |
if [ "$RUNNER_OS" == "Linux" ]; then
wget -qO- https://micromamba.snakepit.net/api/micromamba/linux-64/latest | tar -xvj bin/micromamba --strip-components=1
else
wget -qO- https://micromamba.snakepit.net/api/micromamba/osx-64/latest | tar -xvj bin/micromamba
mv bin/micromamba ./micromamba
fi
./micromamba shell init -s bash -p ~/micromamba
mkdir -p ~/micromamba/pkgs/
- name: install deps
shell: bash -l {0}
run: |
export MAMBA_ROOT_PREFIX=~/micromamba
export MAMBA_EXE=$(pwd)/micromamba
. $MAMBA_ROOT_PREFIX/etc/profile.d/mamba.sh
./micromamba create -f ./test/env_unix.yaml -y
- name: run tests
shell: bash -l {0}
run: |
export MAMBA_ROOT_PREFIX=~/micromamba
export MAMBA_EXE=$(pwd)/micromamba
. $MAMBA_ROOT_PREFIX/etc/profile.d/mamba.sh
micromamba activate test
pip install -e .
pytest test/
test_win_shells:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [windows-latest]
steps:
- uses: actions/checkout@v2
- name: install micromamba
shell: powershell
run: |
Invoke-Webrequest -URI https://micromamba.snakepit.net/api/micromamba/win-64/latest -OutFile micromamba.tar.bz2
C:\PROGRA~1\7-Zip\7z.exe x micromamba.tar.bz2 -aoa
C:\PROGRA~1\7-Zip\7z.exe x micromamba.tar -ttar -aoa -r Library\bin\micromamba.exe
MOVE -Force Library\bin\micromamba.exe micromamba.exe
.\micromamba.exe shell init -s powershell -p ~/micromamba
- name: install deps
shell: powershell
run: |
$Env:MAMBA_ROOT_PREFIX=(Join-Path -Path $HOME -ChildPath micromamba)
$Env:MAMBA_EXE=(Join-Path -Path (Get-Location) -ChildPath micromamba.exe)
.\micromamba.exe create -f ./test/env_win.yaml -y
- name: run tests
shell: powershell
run: |
# micromamba activate test
~/micromamba/envs/test/Scripts/pip.exe install -e .
~/micromamba/envs/test/Scripts/pytest.exe test/
if ($LastExitCode -ne 0) {
exit 1
}
@wolfv
Copy link
Author

wolfv commented Nov 24, 2021

and source ~/.zshrc

@Meao
Copy link

Meao commented Nov 24, 2021

Hm, zsh and source ~/.zshrc functioned as I tried it one more time, yet the error after micromamba install python=3.6 jupyter -c conda-forge is still the same.
Curiously, terminal does not keep most of the commands I try in its history as I close and open it, never seen that behaviour berfore.

@wolfv
Copy link
Author

wolfv commented Nov 24, 2021

this line looks weird: mv ./micromamba bin/micromamba.
You might want the other way around?

You could try completely wiping the ~/micromamba folder and start from scratch?

PS these are the original instructiosn. Looks like you mixed them up ?!

curl -Ls https://micromamba.snakepit.net/api/micromamba/osx-64/latest | tar -xvj bin/micromamba
mv bin/micromamba ./micromamba
./micromamba shell init -s zsh -p ~/micromamba
source ~/.zshrc
micromamba activate
micromamba install python=3.6 jupyter -c conda-forge

@Meao
Copy link

Meao commented Nov 24, 2021

curl -Ls https://micromamba.snakepit.net/api/micromamba/osx-64/latest | tar -xvj bin/micromamba
still outputs
SSL certificate problem: certificate has expired

mv bin/micromamba ./micromamba
./micromamba shell init -s zsh -p ~/micromamba
source ~/.zshrc
micromamba activate
still outputs
-bash: micromamba: command not found

@wolfv
Copy link
Author

wolfv commented Nov 24, 2021

The certificate is valid up to December 25 on my machine. If curl isn't downloading anything, then obviously you will not be able to run the following commands. It also looks like you are in fact using bash? Are you on a really old mac?

@Meao
Copy link

Meao commented Nov 24, 2021

curl -Lsvk
works and pulls the file, the machine is not old, it's 2013, just upgraded to Mojave. I'm trying to do what I need with plain mamba now, maybe I'll be luckier that way. I'm also thinking of creating a docker container with a linux inside, yet I don't know how will I be able to open jupyter notebooks I need to view yet.

@s-tomar
Copy link

s-tomar commented May 7, 2022

@Meao
I'm not sure if you've already resolved this issue. But in your following snippet I notice the directory structure with /home/$USER.
./micromamba shell init -s bash -p /home/$USER/micromamba

As you're on Mojave, are you sure that you've this directory structure?

@wolfv In case you missed this point.

@Python-37
Copy link

Hello, I noticed that version 0.23.0 added auth login/logout subcommands, what do these used for? Thanks.

@wolfv
Copy link
Author

wolfv commented May 16, 2022

@Python-37 you can use them to add login information to a .mamba/auth/authentication.json file – the login information is then automatically injected when performing requests against the domains.

@xiamaz
Copy link

xiamaz commented Jun 11, 2022

I have created an automatic update script if anyone is interested:

#!/usr/bin/bash

UPDATE_URL="https://api.anaconda.org/release/conda-forge/micromamba/latest"

function version_gt() {
	test "$(echo "$@" | tr " " "\n" | sort -V | head -n 1)" != "$1";
}

install_micromamba() {
	download_url="https:$(jq -r ".download_url" <<< $1)"
	echo $download_url
	curl -Ls "$download_url" | tar -xvj -C $(dirname $MAMBA_EXE) "bin/micromamba"
	# "$MAMBA_EXE"
}

if [ -z $MAMBA_EXE ]; then
	echo "MAMBA_EXE is unset. Install MAMBA first!"
	exit
fi

arch="$(uname -m)"
case `uname -s` in
	Linux)
		platform="linux"
		;;
	Darwin)
		platform="osx"
		;;
	*)
		platform="unknown"
		;;
esac
info_json=$(curl -s "$UPDATE_URL" | jq ".distributions | .[] | select((.attrs.arch==\"$arch\") and (.attrs.platform==\"$platform\"))")

available_version=$(jq -r ".version" <<< "$info_json")
installed_version=$(micromamba --version)

if version_gt $available_version $installed_version; then
	echo "micromamba newer version $available_version available. (installed: $installed_version)"
	read -p "Upgrade? (yN) " resp
	case "$resp" in
		y|Y)
			echo "Updating micromamba"
			install_micromamba "$info_json"
			;;
		*)
			echo "Cancelling upgrade..."
			;;
	esac
else
	echo "micromamba version $available_version available. (installed: $installed_version)"
fi

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment