Merge pull request #1128 from minrk/micromamba-usr-local

put micromamba in /usr/local/bin and use mamba for installs
pull/1093/merge
Min RK 2022-02-01 09:07:09 +01:00 zatwierdzone przez GitHub
commit 47ea95a743
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 4AEE18F83AFDEB23
5 zmienionych plików z 29 dodań i 28 usunięć

Wyświetl plik

@ -56,7 +56,9 @@ class CondaBuildPack(BaseImage):
("NPM_CONFIG_GLOBALCONFIG", "${NPM_DIR}/npmrc"), ("NPM_CONFIG_GLOBALCONFIG", "${NPM_DIR}/npmrc"),
("NB_ENVIRONMENT_FILE", self._nb_environment_file), ("NB_ENVIRONMENT_FILE", self._nb_environment_file),
("MAMBA_ROOT_PREFIX", "${CONDA_DIR}"), ("MAMBA_ROOT_PREFIX", "${CONDA_DIR}"),
("MAMBA_EXE", "/tmp/bin/micromamba"), # this exe should be used for installs after bootstrap with micromamba
# switch this to /usr/local/bin/micromamba to use it for all installs
("MAMBA_EXE", "${CONDA_DIR}/bin/mamba"),
] ]
if self._nb_requirements_file: if self._nb_requirements_file:
env.append(("NB_REQUIREMENTS_FILE", self._nb_requirements_file)) env.append(("NB_REQUIREMENTS_FILE", self._nb_requirements_file))
@ -334,13 +336,15 @@ class CondaBuildPack(BaseImage):
environment_yml = self.binder_path("environment.yml") environment_yml = self.binder_path("environment.yml")
env_prefix = "${KERNEL_PYTHON_PREFIX}" if self.py2 else "${NB_PYTHON_PREFIX}" env_prefix = "${KERNEL_PYTHON_PREFIX}" if self.py2 else "${NB_PYTHON_PREFIX}"
if os.path.exists(environment_yml): if os.path.exists(environment_yml):
# TODO: when using micromamba, we call $MAMBA_EXE install -p ...
# whereas mamba/conda need `env update -p ...` when it's an env.yaml file
scripts.append( scripts.append(
( (
"${NB_USER}", "${NB_USER}",
r""" r"""
TIMEFORMAT='time: %3R' \ TIMEFORMAT='time: %3R' \
bash -c 'time ${{MAMBA_EXE}} install -p {0} -f "{1}" && \ bash -c 'time ${{MAMBA_EXE}} env update -p {0} --file "{1}" && \
time ${{MAMBA_EXE}} clean --all -y && \ time ${{MAMBA_EXE}} clean --all -f -y && \
${{MAMBA_EXE}} list -p {0} \ ${{MAMBA_EXE}} list -p {0} \
' '
""".format( """.format(
@ -359,7 +363,7 @@ class CondaBuildPack(BaseImage):
"${NB_USER}", "${NB_USER}",
r""" r"""
${{MAMBA_EXE}} install -p {0} r-base{1} r-irkernel=1.2 r-devtools -y && \ ${{MAMBA_EXE}} install -p {0} r-base{1} r-irkernel=1.2 r-devtools -y && \
${{MAMBA_EXE}} clean --all -y && \ ${{MAMBA_EXE}} clean --all -f -y && \
${{MAMBA_EXE}} list -p {0} ${{MAMBA_EXE}} list -p {0}
""".format( """.format(
env_prefix, r_pin env_prefix, r_pin

Wyświetl plik

@ -1,13 +1,14 @@
# enable conda and activate the notebook environment # enable conda and activate the notebook environment
/tmp/bin/micromamba shell init -s bash -p ${CONDA_DIR} eval $(micromamba shell hook -s posix -p ${CONDA_DIR})
export MAMBA_ROOT_PREFIX="/srv/conda" for name in conda mamba; do
CONDA_PROFILE="${CONDA_DIR}/etc/profile.d/mamba.sh" CONDA_PROFILE="${CONDA_DIR}/etc/profile.d/${name}.sh"
test -f $CONDA_PROFILE && . $CONDA_PROFILE test -f $CONDA_PROFILE && . $CONDA_PROFILE
done
if [[ "${KERNEL_PYTHON_PREFIX}" != "${NB_PYTHON_PREFIX}" ]]; then if [[ "${KERNEL_PYTHON_PREFIX}" != "${NB_PYTHON_PREFIX}" ]]; then
# if the kernel is a separate env, stack them # if the kernel is a separate env, stack them
# so both are on PATH, notebook first # so both are on PATH, notebook first
micromamba activate ${KERNEL_PYTHON_PREFIX} mamba activate ${KERNEL_PYTHON_PREFIX}
micromamba activate --stack ${NB_PYTHON_PREFIX} mamba activate --stack ${NB_PYTHON_PREFIX}
# even though it's second on $PATH # even though it's second on $PATH
# make sure CONDA_DEFAULT_ENV is the *kernel* env # make sure CONDA_DEFAULT_ENV is the *kernel* env
@ -16,5 +17,5 @@ if [[ "${KERNEL_PYTHON_PREFIX}" != "${NB_PYTHON_PREFIX}" ]]; then
# which only contains UI when the two are different # which only contains UI when the two are different
export CONDA_DEFAULT_ENV="${KERNEL_PYTHON_PREFIX}" export CONDA_DEFAULT_ENV="${KERNEL_PYTHON_PREFIX}"
else else
micromamba activate ${NB_PYTHON_PREFIX} mamba activate ${NB_PYTHON_PREFIX}
fi fi

Wyświetl plik

@ -15,13 +15,13 @@ URL="https://anaconda.org/conda-forge/micromamba/${MAMBA_VERSION}/download/linux
unset HOME unset HOME
mkdir -p ${CONDA_DIR} mkdir -p ${CONDA_DIR}
export MICROMAMBA_EXE="/usr/local/bin/micromamba"
time wget -qO- ${URL} | tar -xvj bin/micromamba time wget -qO- ${URL} | tar -xvj bin/micromamba
chmod 0755 /tmp/bin/micromamba mv bin/micromamba "$MICROMAMBA_EXE"
chmod 0755 "$MICROMAMBA_EXE"
export MAMBA_ROOT_PREFIX=${CONDA_DIR} eval "$(${MICROMAMBA_EXE} shell hook -p ${CONDA_DIR} -s posix)"
export MAMBA_EXE="/tmp/bin/micromamba"
eval "$(/tmp/bin/micromamba shell hook -p ${CONDA_DIR} -s posix)"
micromamba activate micromamba activate
@ -43,7 +43,7 @@ echo "installing notebook env:"
cat "${NB_ENVIRONMENT_FILE}" cat "${NB_ENVIRONMENT_FILE}"
time micromamba create -p ${NB_PYTHON_PREFIX} -f "${NB_ENVIRONMENT_FILE}" time ${MAMBA_EXE} create -p ${NB_PYTHON_PREFIX} --file "${NB_ENVIRONMENT_FILE}"
if [[ ! -z "${NB_REQUIREMENTS_FILE:-}" ]]; then if [[ ! -z "${NB_REQUIREMENTS_FILE:-}" ]]; then
echo "installing pip requirements" echo "installing pip requirements"
@ -60,7 +60,7 @@ if [[ ! -z "${KERNEL_ENVIRONMENT_FILE:-}" ]]; then
# install kernel env and register kernelspec # install kernel env and register kernelspec
echo "installing kernel env:" echo "installing kernel env:"
cat "${KERNEL_ENVIRONMENT_FILE}" cat "${KERNEL_ENVIRONMENT_FILE}"
time micromamba create -p ${KERNEL_PYTHON_PREFIX} -f "${KERNEL_ENVIRONMENT_FILE}" time ${MAMBA_EXE} create -p ${KERNEL_PYTHON_PREFIX} --file "${KERNEL_ENVIRONMENT_FILE}"
if [[ ! -z "${KERNEL_REQUIREMENTS_FILE:-}" ]]; then if [[ ! -z "${KERNEL_REQUIREMENTS_FILE:-}" ]]; then
echo "installing pip requirements for kernel" echo "installing pip requirements for kernel"
@ -70,18 +70,18 @@ if [[ ! -z "${KERNEL_ENVIRONMENT_FILE:-}" ]]; then
${KERNEL_PYTHON_PREFIX}/bin/ipython kernel install --prefix "${NB_PYTHON_PREFIX}" ${KERNEL_PYTHON_PREFIX}/bin/ipython kernel install --prefix "${NB_PYTHON_PREFIX}"
echo '' > ${KERNEL_PYTHON_PREFIX}/conda-meta/history echo '' > ${KERNEL_PYTHON_PREFIX}/conda-meta/history
micromamba list -p ${KERNEL_PYTHON_PREFIX} ${MAMBA_EXE} list -p ${KERNEL_PYTHON_PREFIX}
fi fi
# Clean things out! # Clean things out!
time micromamba clean --all -y time ${MAMBA_EXE} clean --all -f -y
# Remove the pip cache created as part of installing micromamba # Remove the pip cache created as part of installing micromamba
rm -rf /root/.cache rm -rf /root/.cache
chown -R $NB_USER:$NB_USER ${CONDA_DIR} chown -R $NB_USER:$NB_USER ${CONDA_DIR}
micromamba list -p ${NB_PYTHON_PREFIX} ${MAMBA_EXE} list -p ${NB_PYTHON_PREFIX}
# Set NPM config # Set NPM config
${NB_PYTHON_PREFIX}/bin/npm config --global set prefix ${NPM_DIR} ${NB_PYTHON_PREFIX}/bin/npm config --global set prefix ${NPM_DIR}

Wyświetl plik

@ -4,7 +4,7 @@ from subprocess import check_output
assert sys.version_info[:2] == (3, 5), sys.version assert sys.version_info[:2] == (3, 5), sys.version
out = check_output(["/tmp/bin/micromamba", "--version"]).decode("utf8").strip() out = check_output(["micromamba", "--version"]).decode("utf8").strip()
assert ( assert (
out out
== """micromamba: 0.19.1 == """micromamba: 0.19.1

Wyświetl plik

@ -14,17 +14,13 @@ assert sorted(specs) == ["python2", "python3"], specs.keys()
import json import json
from subprocess import check_output from subprocess import check_output
envs = json.loads( envs = json.loads(check_output(["micromamba", "env", "list", "--json"]).decode("utf8"))
check_output(["/tmp/bin/micromamba", "env", "list", "--json"]).decode("utf8")
)
assert envs == { assert envs == {
"envs": ["/srv/conda", "/srv/conda/envs/kernel", "/srv/conda/envs/notebook"] "envs": ["/srv/conda", "/srv/conda/envs/kernel", "/srv/conda/envs/notebook"]
}, envs }, envs
pkgs = json.loads( pkgs = json.loads(
check_output(["/tmp/bin/micromamba", "list", "-n", "kernel", "--json"]).decode( check_output(["micromamba", "list", "-n", "kernel", "--json"]).decode("utf8")
"utf8"
)
) )
pkg_names = [pkg["name"] for pkg in pkgs] pkg_names = [pkg["name"] for pkg in pkgs]
assert "ipykernel" in pkg_names, pkg_names assert "ipykernel" in pkg_names, pkg_names