From 33a4e70e16c00ac97751ae7b9054bec24f376748 Mon Sep 17 00:00:00 2001 From: Jens Henrik Goebbert <j.goebbert@fz-juelich.de> Date: Wed, 18 Jun 2025 18:37:40 +0200 Subject: [PATCH] update conda-support --- 03-HowTos/Create_JupyterKernel_conda.ipynb | 318 -- .../Create_JupyterKernel_miniforge.ipynb | 2763 +++++++++++++++++ 2 files changed, 2763 insertions(+), 318 deletions(-) delete mode 100644 03-HowTos/Create_JupyterKernel_conda.ipynb create mode 100644 03-HowTos/Create_JupyterKernel_miniforge.ipynb diff --git a/03-HowTos/Create_JupyterKernel_conda.ipynb b/03-HowTos/Create_JupyterKernel_conda.ipynb deleted file mode 100644 index 1cad329..0000000 --- a/03-HowTos/Create_JupyterKernel_conda.ipynb +++ /dev/null @@ -1,318 +0,0 @@ -{ - "cells": [ - { - "attachments": { - "364f4d26-8fd6-45ed-a6c3-1ab27dad25c4.png": { - "image/png": "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" - } - }, - "cell_type": "markdown", - "metadata": { - "toc-hr-collapsed": false - }, - "source": [ - "\n", - "<h5 style=\"text-align: right\">Author: <a href=\"mailto:s.luehrs@fz-juelich.de?subject=Jupyter-JSC%20documentation\">Sebastian Lührs</a></h5> \n", - "<h5><a href=\"../index.ipynb\">Index</a></h5>\n", - "<h1 style=\"text-align: center\">Create your own Jupyter CONDA-Kernel</h1> " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Often the standard kernel do not provide all features you need for your work. This might be that certain modules are not loaded or packages are not installed.\n", - "With your own kernel you can overcome that problem easily and define your own environment, in which you work.\n", - "\n", - "This notebook shows you how you can build your own kernel for a **conda environment**.\n", - "\n", - "--------------------------------------" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Building your own Jupyter CONDA-kernel is a three step process\n", - "Download Minconda installer\n", - "1. Download/Install Miniconda\n", - " * Miniconda3.sh\n", - "2. Create Conda Environment\n", - " * conda create\n", - "2. Create/Edit launch script for the Jupyter kernel\n", - " * kernel.sh\n", - "3. Create/Edit Jupyter kernel configuration\n", - " * kernel.json" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Settings" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Selectable **CONDA_ENV** name, will be used to specify the environment name\n", - " - must be lowercase" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "CONDA_ENV=my_condaenv\n", - "\n", - "export CONDA_ENV=$(echo \"${CONDA_ENV}\" | awk '{print tolower($0)}')\n", - "echo ${CONDA_ENV} # double check" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Selectable **CONDA_TARGET_DIR** path for the central conda installation, should be in the project filesystem" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "export CONDA_TARGET_DIR=${PROJECT}/${USER}/miniconda3/${CONDA_ENV}" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "---\n", - "## 1. Download/Install Miniconda" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Start here if you want to run the full installation.\n", - "If you want to create another environment in an existing conda setup go to **create environment**. If you want to attach yourself to an existing environment go to **create user kernel**." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "* 1.1 - Download Minconda installer" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "wget --output-document=$HOME/Miniconda3.sh https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "* 1.2 - Create target directory" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "mkdir -p ${CONDA_TARGET_DIR}\n", - "echo ${CONDA_TARGET_DIR}" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "* 1.3 - Install Miniconda" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "unset PYTHONPATH\n", - "bash $HOME/Miniconda3.sh -b -u -p ${CONDA_TARGET_DIR}" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "* 1.4 - Disable automatic activation \n", - "Create `~/.condarc` and add the configuration settings." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "${CONDA_TARGET_DIR}/bin/conda config --set auto_activate_base false" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "---\n", - "## 2. Create conda environment" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Create new conda environment. The following steps can be repeated if multiple environments should be created. If the Python version differ towards the external Python version, a mix of Conda modules and external modules will not be possible" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "scrolled": true - }, - "outputs": [], - "source": [ - "${CONDA_TARGET_DIR}/bin/conda create -n ${CONDA_ENV} -y python=3.11.3 ipykernel" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "---\n", - "## 3. Create/Edit launch script for the Jupyter kernel" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "* 3.1 - Create kernel to allow access to the conda environment. Adapte `module purge` and `PYTHONPATH` according to the comments." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "echo '#!/bin/bash\n", - "\n", - "# module purge # optional to disable the external environment, necessary, if python version is different\n", - " \n", - "# Activate your Python virtual environment\n", - "source '\"${CONDA_TARGET_DIR}\"'/bin/activate '\"${CONDA_ENV}\"'\n", - " \n", - "# Ensure python packages installed in conda are always prefered, not necessary if module purge is used\n", - "export PYTHONPATH=${CONDA_PREFIX}/lib/python3.11/site-packages:${PYTHONPATH}\n", - " \n", - "exec python -m ipykernel $@' > ${CONDA_TARGET_DIR}/envs/${CONDA_ENV}/kernel.sh" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "chmod +x ${CONDA_TARGET_DIR}/envs/${CONDA_ENV}/kernel.sh\n", - "echo ${CONDA_TARGET_DIR}/envs/${CONDA_ENV}/kernel.sh" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "---\n", - "## 4. Create/Edit Jupyter kernel configuration" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "* 4.1 - Create user kernel, if you want to access the conda environment of a colleague, only these steps are necessary" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "mkdir -p $HOME/.local/share/jupyter/kernels/conda_${CONDA_ENV}" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "* 4.2 - Adjust kernel.json file" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "echo '{\n", - " \"argv\": [\n", - " \"'\"${CONDA_TARGET_DIR}\"'/envs/'\"${CONDA_ENV}\"'/kernel.sh\",\n", - " \"-f\",\n", - " \"{connection_file}\"\n", - " ],\n", - " \"display_name\": \"conda_'\"${CONDA_ENV}\"'\",\n", - " \"language\": \"python\",\n", - " \"metadata\": {\n", - " \"debugger\": true\n", - " }\n", - "}' > $HOME/.local/share/jupyter/kernels/conda_${CONDA_ENV}/kernel.json" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Restart of JupyterLab might be necessary to see the kernel in the kernel selection overview." - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Bash", - "language": "bash", - "name": "bash" - }, - "language_info": { - "codemirror_mode": "shell", - "file_extension": ".sh", - "mimetype": "text/x-sh", - "name": "bash" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/03-HowTos/Create_JupyterKernel_miniforge.ipynb b/03-HowTos/Create_JupyterKernel_miniforge.ipynb new file mode 100644 index 0000000..3e550d8 --- /dev/null +++ b/03-HowTos/Create_JupyterKernel_miniforge.ipynb @@ -0,0 +1,2763 @@ +{ + "cells": [ + { + "attachments": { + "364f4d26-8fd6-45ed-a6c3-1ab27dad25c4.png": { + "image/png": "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" + } + }, + "cell_type": "markdown", + "id": "ccca6570-1a7d-44ea-a7b5-892d99f7e9c5", + "metadata": { + "toc-hr-collapsed": false + }, + "source": [ + "\n", + "<h5 style=\"text-align: right\">Author: <a href=\"mailto:s.luehrs@fz-juelich.de?subject=Jupyter-JSC%20documentation\">Sebastian Lührs, Jens Henrik Göbbert</a></h5> \n", + "<h5><a href=\"../index.ipynb\">Index</a></h5>\n", + "<h1 style=\"text-align: center\">Create your own Jupyter CONDA-Kernel</h1> " + ] + }, + { + "cell_type": "markdown", + "id": "d347ba8a-5d72-4fb9-a24c-0d119299e0c2", + "metadata": {}, + "source": [ + "Often the standard kernel do not provide all features you need for your work. This might be that certain modules are not loaded or packages are not installed.\n", + "With your own kernel you can overcome that problem easily and define your own environment, in which you work.\n", + "\n", + "This notebook shows you how you can build your own kernel for a **conda environment**.\n", + "\n", + "--------------------------------------" + ] + }, + { + "cell_type": "markdown", + "id": "5e365cf9-53a7-42c3-ac03-710131b25e13", + "metadata": {}, + "source": [ + "## Building your own Jupyter CONDA-kernel is a three step process\n", + "Download Minconda installer\n", + "1. Download/Install Miniforge\n", + " * Miniforge3.sh\n", + "2. Create Conda Environment\n", + " * conda create\n", + "2. Create/Edit launch script for the Jupyter kernel\n", + " * kernel.sh\n", + "3. Create/Edit Jupyter kernel configuration\n", + " * kernel.json" + ] + }, + { + "cell_type": "markdown", + "id": "999e5a83-6c38-4b0f-90a0-9556c003b084", + "metadata": {}, + "source": [ + "### Settings" + ] + }, + { + "cell_type": "markdown", + "id": "1b97ea53-0394-42b3-8c6e-528e8cdc3bdf", + "metadata": {}, + "source": [ + "Selectable **CONDA_ENV** name, will be used to specify the environment name\n", + " - must be lowercase" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "b67a421a-90ae-4eb0-b2ea-6d81c22858f7", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "my_condaenv\n" + ] + } + ], + "source": [ + "CONDA_ENV=my_condaenv\n", + "\n", + "export CONDA_ENV=$(echo \"${CONDA_ENV}\" | awk '{print tolower($0)}')\n", + "echo ${CONDA_ENV} # double check" + ] + }, + { + "cell_type": "markdown", + "id": "4e3c03ed-958e-45ce-81c3-2bb286a23f00", + "metadata": {}, + "source": [ + "Selectable **CONDA_TARGET_DIR** path for the central conda installation, should be in the project filesystem" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "c7c016fe-3073-4513-a74d-2a0c9bb75962", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "/p/project1/ccstvs/goebbert1/miniforge3/my_condaenv\n" + ] + } + ], + "source": [ + "export CONDA_TARGET_DIR=${PROJECT}/${USER}/miniforge3/${CONDA_ENV}\n", + "echo ${CONDA_TARGET_DIR} # double check" + ] + }, + { + "cell_type": "markdown", + "id": "849cc1bc-fd95-4829-80c5-aebaf2ce1635", + "metadata": {}, + "source": [ + "---\n", + "## 1. Download/Install Miniforge" + ] + }, + { + "cell_type": "markdown", + "id": "e22949b1-e4f9-40de-b58d-b6a5165d5225", + "metadata": {}, + "source": [ + "Start here if you want to run the full installation.\n", + "If you want to create another environment in an existing conda setup go to **create environment**. If you want to attach yourself to an existing environment go to **create user kernel**." + ] + }, + { + "cell_type": "markdown", + "id": "599cf30a-9f94-4d0e-a1f0-a4a8e9e3053a", + "metadata": {}, + "source": [ + "* 1.1 - Download Miniforge installer" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "c83c19db-eece-45ab-8a89-943941c6123f", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "--2025-06-18 18:27:50-- https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-x86_64.sh\n", + "Resolving github.com (github.com)... 140.82.121.3\n", + "Connecting to github.com (github.com)|140.82.121.3|:443... connected.\n", + "HTTP request sent, awaiting response... 302 Found\n", + "Location: https://github.com/conda-forge/miniforge/releases/download/25.3.0-3/Miniforge3-Linux-x86_64.sh [following]\n", + "--2025-06-18 18:27:51-- https://github.com/conda-forge/miniforge/releases/download/25.3.0-3/Miniforge3-Linux-x86_64.sh\n", + "Reusing existing connection to github.com:443.\n", + "HTTP request sent, awaiting response... 302 Found\n", + "Location: https://objects.githubusercontent.com/github-production-release-asset-2e65be/221584272/11d9f638-f965-42b5-be9a-b27df154f8b0?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=releaseassetproduction%2F20250618%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250618T162744Z&X-Amz-Expires=300&X-Amz-Signature=338d0c57e293f4518316813646852a5ff90c5bba149ca0057e65c6ea75010b8d&X-Amz-SignedHeaders=host&response-content-disposition=attachment%3B%20filename%3DMiniforge3-Linux-x86_64.sh&response-content-type=application%2Foctet-stream [following]\n", + "--2025-06-18 18:27:51-- https://objects.githubusercontent.com/github-production-release-asset-2e65be/221584272/11d9f638-f965-42b5-be9a-b27df154f8b0?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=releaseassetproduction%2F20250618%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250618T162744Z&X-Amz-Expires=300&X-Amz-Signature=338d0c57e293f4518316813646852a5ff90c5bba149ca0057e65c6ea75010b8d&X-Amz-SignedHeaders=host&response-content-disposition=attachment%3B%20filename%3DMiniforge3-Linux-x86_64.sh&response-content-type=application%2Foctet-stream\n", + "Resolving objects.githubusercontent.com (objects.githubusercontent.com)... 185.199.111.133, 185.199.109.133, 185.199.110.133, ...\n", + "Connecting to objects.githubusercontent.com (objects.githubusercontent.com)|185.199.111.133|:443... connected.\n", + "HTTP request sent, awaiting response... 200 OK\n", + "Length: 93676241 (89M) [application/octet-stream]\n", + "Saving to: ‘/p/home/jusers/goebbert1/juwels/Miniforge3.sh’\n", + "\n", + "/p/home/jusers/goeb 100%[===================>] 89.34M 209MB/s in 0.4s \n", + "\n", + "2025-06-18 18:27:52 (209 MB/s) - ‘/p/home/jusers/goebbert1/juwels/Miniforge3.sh’ saved [93676241/93676241]\n", + "\n" + ] + } + ], + "source": [ + "wget --output-document=$HOME/Miniforge3.sh https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-x86_64.sh" + ] + }, + { + "cell_type": "markdown", + "id": "b16ff496-9214-4089-8cb1-b9f3d5bb24dd", + "metadata": {}, + "source": [ + "* 1.2 - Create target directory" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "c4d47aa3-3894-4110-b18a-538125f45008", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "/p/project1/ccstvs/goebbert1/miniforge3/my_condaenv\n" + ] + } + ], + "source": [ + "mkdir -p ${CONDA_TARGET_DIR}\n", + "echo ${CONDA_TARGET_DIR}" + ] + }, + { + "cell_type": "markdown", + "id": "18ad5818-93ca-4e1c-b7ab-5146b906ceb1", + "metadata": {}, + "source": [ + "* 1.3 - Install Miniforge" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "1dbfb9bc-82cf-44e6-9727-7ee4c82e3302", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "PREFIX=/p/project1/ccstvs/goebbert1/miniforge3/my_condaenv\n", + "Unpacking payload ...\n", + "Extracting _libgcc_mutex-0.1-conda_forge.tar.bz2\n", + "Extracting ca-certificates-2025.4.26-hbd8a1cb_0.conda\n", + "Extracting ld_impl_linux-64-2.43-h712a8e2_4.conda\n", + "Extracting libgomp-15.1.0-h767d61c_2.conda\n", + "Extracting pybind11-abi-4-hd8ed1ab_3.tar.bz2\n", + "Extracting python_abi-3.12-7_cp312.conda\n", + "Extracting tzdata-2025b-h78e105d_0.conda\n", + "Extracting _openmp_mutex-4.5-2_gnu.tar.bz2\n", + "Extracting libgcc-15.1.0-h767d61c_2.conda\n", + "Extracting c-ares-1.34.5-hb9d3cd8_0.conda\n", + "Extracting libexpat-2.7.0-h5888daf_0.conda\n", + "Extracting libffi-3.4.6-h2dba641_1.conda\n", + "Extracting libgcc-ng-15.1.0-h69a702a_2.conda\n", + "Extracting libiconv-1.18-h4ce23a2_1.conda\n", + "Extracting liblzma-5.8.1-hb9d3cd8_1.conda\n", + "Extracting libstdcxx-15.1.0-h8f9b012_2.conda\n", + "Extracting libzlib-1.3.1-hb9d3cd8_2.conda\n", + "Extracting ncurses-6.5-h2d0b736_3.conda\n", + "Extracting openssl-3.5.0-h7b32b05_1.conda\n", + "Extracting reproc-14.2.5.post0-hb9d3cd8_0.conda\n", + "Extracting bzip2-1.0.8-h4bc722e_7.conda\n", + "Extracting cpp-expected-1.1.0-hff21bea_1.conda\n", + "Extracting fmt-11.1.4-h07f6e7f_1.conda\n", + "Extracting keyutils-1.6.1-h166bdaf_0.tar.bz2\n", + "Extracting libedit-3.1.20250104-pl5321h7949ede_0.conda\n", + "Extracting libev-4.33-hd590300_2.conda\n", + "Extracting libnsl-2.0.1-hd590300_0.conda\n", + "Extracting libsolv-0.7.32-h7955e40_2.conda\n", + "Extracting libsqlite-3.49.2-hee588c1_0.conda\n", + "Extracting libssh2-1.11.1-hcf80075_0.conda\n", + "Extracting libstdcxx-ng-15.1.0-h4852527_2.conda\n", + "Extracting libuuid-2.38.1-h0b41bf4_0.conda\n", + "Extracting libxcrypt-4.4.36-hd590300_1.conda\n", + "Extracting lz4-c-1.10.0-h5888daf_1.conda\n", + "Extracting lzo-2.10-hd590300_1001.conda\n", + "Extracting readline-8.2-h8c095d6_2.conda\n", + "Extracting reproc-cpp-14.2.5.post0-h5888daf_0.conda\n", + "Extracting simdjson-3.12.3-h84d6215_0.conda\n", + "Extracting tk-8.6.13-noxft_h4845f30_101.conda\n", + "Extracting yaml-cpp-0.8.0-h3f2d84a_0.conda\n", + "Extracting zstd-1.5.7-hb8e6e7a_2.conda\n", + "Extracting icu-75.1-he02047a_0.conda\n", + "Extracting krb5-1.21.3-h659f571_0.conda\n", + "Extracting libnghttp2-1.64.0-h161d5f1_0.conda\n", + "Extracting nlohmann_json-3.11.3-he02047a_1.conda\n", + "Extracting python-3.12.10-h9e4cc4f_0_cpython.conda\n", + "Extracting libcurl-8.13.0-h332b0f4_0.conda\n", + "Extracting libxml2-2.13.8-h4bc477f_0.conda\n", + "Extracting menuinst-2.2.0-py312h7900ff3_0.conda\n", + "Extracting archspec-0.2.5-pyhd8ed1ab_0.conda\n", + "Extracting boltons-24.0.0-pyhd8ed1ab_1.conda\n", + "Extracting brotli-python-1.1.0-py312h2ec8cdc_2.conda\n", + "Extracting certifi-2025.4.26-pyhd8ed1ab_0.conda\n", + "Extracting charset-normalizer-3.4.2-pyhd8ed1ab_0.conda\n", + "Extracting colorama-0.4.6-pyhd8ed1ab_1.conda\n", + "Extracting distro-1.9.0-pyhd8ed1ab_1.conda\n", + "Extracting frozendict-2.4.6-py312h66e93f0_0.conda\n", + "Extracting hpack-4.1.0-pyhd8ed1ab_0.conda\n", + "Extracting hyperframe-6.1.0-pyhd8ed1ab_0.conda\n", + "Extracting idna-3.10-pyhd8ed1ab_1.conda\n", + "Extracting jsonpointer-3.0.0-py312h7900ff3_1.conda\n", + "Extracting libarchive-3.7.7-h75ea233_4.conda\n", + "Extracting packaging-25.0-pyh29332c3_1.conda\n", + "Extracting platformdirs-4.3.8-pyhe01879c_0.conda\n", + "Extracting pluggy-1.5.0-pyhd8ed1ab_1.conda\n", + "Extracting pycosat-0.6.6-py312h66e93f0_2.conda\n", + "Extracting pycparser-2.22-pyh29332c3_1.conda\n", + "Extracting pysocks-1.7.1-pyha55dd90_7.conda\n", + "Extracting ruamel.yaml.clib-0.2.8-py312h66e93f0_1.conda\n", + "Extracting setuptools-80.1.0-pyhff2d567_0.conda\n", + "Extracting truststore-0.10.1-pyh29332c3_0.conda\n", + "Extracting wheel-0.45.1-pyhd8ed1ab_1.conda\n", + "Extracting cffi-1.17.1-py312h06ac9bb_0.conda\n", + "Extracting h2-4.2.0-pyhd8ed1ab_0.conda\n", + "Extracting jsonpatch-1.33-pyhd8ed1ab_1.conda\n", + "Extracting libmamba-2.1.1-h430c389_0.conda\n", + "Extracting pip-25.1.1-pyh8b19718_0.conda\n", + "Extracting ruamel.yaml-0.18.10-py312h66e93f0_0.conda\n", + "Extracting tqdm-4.67.1-pyhd8ed1ab_1.conda\n", + "Extracting libmambapy-2.1.1-py312h07448e0_0.conda\n", + "Extracting mamba-2.1.1-had4a41a_0.conda\n", + "Extracting zstandard-0.23.0-py312h66e93f0_2.conda\n", + "Extracting conda-package-streaming-0.11.0-pyhd8ed1ab_1.conda\n", + "Extracting urllib3-2.4.0-pyhd8ed1ab_0.conda\n", + "Extracting requests-2.32.3-pyhd8ed1ab_1.conda\n", + "Extracting conda-package-handling-2.4.0-pyh7900ff3_2.conda\n", + "Extracting conda-25.3.0-py312h7900ff3_0.conda\n", + "Extracting conda-libmamba-solver-25.3.0-pyhd8ed1ab_0.conda\n", + "\n", + "Installing base environment...\n", + "\n", + "Transaction\n", + "\n", + " Prefix: /p/project1/ccstvs/goebbert1/miniforge3/my_condaenv\n", + "\n", + " Updating specs:\n", + "\n", + " - _libgcc_mutex==0.1=conda_forge\n", + " - ca-certificates==2025.4.26=hbd8a1cb_0\n", + " - ld_impl_linux-64==2.43=h712a8e2_4\n", + " - libgomp==15.1.0=h767d61c_2\n", + " - pybind11-abi==4=hd8ed1ab_3\n", + " - python_abi==3.12=7_cp312\n", + " - tzdata==2025b=h78e105d_0\n", + " - _openmp_mutex==4.5=2_gnu\n", + " - libgcc==15.1.0=h767d61c_2\n", + " - c-ares==1.34.5=hb9d3cd8_0\n", + " - libexpat==2.7.0=h5888daf_0\n", + " - libffi==3.4.6=h2dba641_1\n", + " - libgcc-ng==15.1.0=h69a702a_2\n", + " - libiconv==1.18=h4ce23a2_1\n", + " - liblzma==5.8.1=hb9d3cd8_1\n", + " - libstdcxx==15.1.0=h8f9b012_2\n", + " - libzlib==1.3.1=hb9d3cd8_2\n", + " - ncurses==6.5=h2d0b736_3\n", + " - openssl==3.5.0=h7b32b05_1\n", + " - reproc==14.2.5.0post0=hb9d3cd8_0\n", + " - bzip2==1.0.8=h4bc722e_7\n", + " - cpp-expected==1.1.0=hff21bea_1\n", + " - fmt==11.1.4=h07f6e7f_1\n", + " - keyutils==1.6.1=h166bdaf_0\n", + " - libedit==3.1.20250104=pl5321h7949ede_0\n", + " - libev==4.33=hd590300_2\n", + " - libnsl==2.0.1=hd590300_0\n", + " - libsolv==0.7.32=h7955e40_2\n", + " - libsqlite==3.49.2=hee588c1_0\n", + " - libssh2==1.11.1=hcf80075_0\n", + " - libstdcxx-ng==15.1.0=h4852527_2\n", + " - libuuid==2.38.1=h0b41bf4_0\n", + " - libxcrypt==4.4.36=hd590300_1\n", + " - lz4-c==1.10.0=h5888daf_1\n", + " - lzo==2.10=hd590300_1001\n", + " - readline==8.2=h8c095d6_2\n", + " - reproc-cpp==14.2.5.0post0=h5888daf_0\n", + " - simdjson==3.12.3=h84d6215_0\n", + " - tk==8.6.13=noxft_h4845f30_101\n", + " - yaml-cpp==0.8.0=h3f2d84a_0\n", + " - zstd==1.5.7=hb8e6e7a_2\n", + " - icu==75.1=he02047a_0\n", + " - krb5==1.21.3=h659f571_0\n", + " - libnghttp2==1.64.0=h161d5f1_0\n", + " - nlohmann_json==3.11.3=he02047a_1\n", + " - python==3.12.10=h9e4cc4f_0_cpython\n", + " - libcurl==8.13.0=h332b0f4_0\n", + " - libxml2==2.13.8=h4bc477f_0\n", + " - menuinst==2.2.0=py312h7900ff3_0\n", + " - archspec==0.2.5=pyhd8ed1ab_0\n", + " - boltons==24.0.0=pyhd8ed1ab_1\n", + " - brotli-python==1.1.0=py312h2ec8cdc_2\n", + " - certifi==2025.4.26=pyhd8ed1ab_0\n", + " - charset-normalizer==3.4.2=pyhd8ed1ab_0\n", + " - colorama==0.4.6=pyhd8ed1ab_1\n", + " - distro==1.9.0=pyhd8ed1ab_1\n", + " - frozendict==2.4.6=py312h66e93f0_0\n", + " - hpack==4.1.0=pyhd8ed1ab_0\n", + " - hyperframe==6.1.0=pyhd8ed1ab_0\n", + " - idna==3.10=pyhd8ed1ab_1\n", + " - jsonpointer==3.0.0=py312h7900ff3_1\n", + " - libarchive==3.7.7=h75ea233_4\n", + " - packaging==25.0=pyh29332c3_1\n", + " - platformdirs==4.3.8=pyhe01879c_0\n", + " - pluggy==1.5.0=pyhd8ed1ab_1\n", + " - pycosat==0.6.6=py312h66e93f0_2\n", + " - pycparser==2.22=pyh29332c3_1\n", + " - pysocks==1.7.1=pyha55dd90_7\n", + " - ruamel.yaml.clib==0.2.8=py312h66e93f0_1\n", + " - setuptools==80.1.0=pyhff2d567_0\n", + " - truststore==0.10.1=pyh29332c3_0\n", + " - wheel==0.45.1=pyhd8ed1ab_1\n", + " - cffi==1.17.1=py312h06ac9bb_0\n", + " - h2==4.2.0=pyhd8ed1ab_0\n", + " - jsonpatch==1.33=pyhd8ed1ab_1\n", + " - libmamba==2.1.1=h430c389_0\n", + " - pip==25.1.1=pyh8b19718_0\n", + " - ruamel.yaml==0.18.10=py312h66e93f0_0\n", + " - tqdm==4.67.1=pyhd8ed1ab_1\n", + " - libmambapy==2.1.1=py312h07448e0_0\n", + " - mamba==2.1.1=had4a41a_0\n", + " - zstandard==0.23.0=py312h66e93f0_2\n", + " - conda-package-streaming==0.11.0=pyhd8ed1ab_1\n", + " - urllib3==2.4.0=pyhd8ed1ab_0\n", + " - requests==2.32.3=pyhd8ed1ab_1\n", + " - conda-package-handling==2.4.0=pyh7900ff3_2\n", + " - conda==25.3.0=py312h7900ff3_0\n", + " - conda-libmamba-solver==25.3.0=pyhd8ed1ab_0\n", + "\n", + "\n", + " Package Version Build Channel Size\n", + "─────────────────────────────────────────────────────────────────────────────────────\n", + " Install:\n", + "─────────────────────────────────────────────────────────────────────────────────────\n", + "\n", + " \u001b[32m+ _libgcc_mutex \u001b[0m 0.1 conda_forge conda-forge \n", + " \u001b[32m+ _openmp_mutex \u001b[0m 4.5 2_gnu conda-forge \n", + " \u001b[32m+ archspec \u001b[0m 0.2.5 pyhd8ed1ab_0 conda-forge \n", + " \u001b[32m+ boltons \u001b[0m 24.0.0 pyhd8ed1ab_1 conda-forge \n", + " \u001b[32m+ brotli-python \u001b[0m 1.1.0 py312h2ec8cdc_2 conda-forge \n", + " \u001b[32m+ bzip2 \u001b[0m 1.0.8 h4bc722e_7 conda-forge \n", + " \u001b[32m+ c-ares \u001b[0m 1.34.5 hb9d3cd8_0 conda-forge \n", + " \u001b[32m+ ca-certificates \u001b[0m 2025.4.26 hbd8a1cb_0 conda-forge \n", + " \u001b[32m+ certifi \u001b[0m 2025.4.26 pyhd8ed1ab_0 conda-forge \n", + " \u001b[32m+ cffi \u001b[0m 1.17.1 py312h06ac9bb_0 conda-forge \n", + " \u001b[32m+ charset-normalizer \u001b[0m 3.4.2 pyhd8ed1ab_0 conda-forge \n", + " \u001b[32m+ colorama \u001b[0m 0.4.6 pyhd8ed1ab_1 conda-forge \n", + " \u001b[32m+ conda \u001b[0m 25.3.0 py312h7900ff3_0 conda-forge \n", + " \u001b[32m+ conda-libmamba-solver \u001b[0m 25.3.0 pyhd8ed1ab_0 conda-forge \n", + " \u001b[32m+ conda-package-handling \u001b[0m 2.4.0 pyh7900ff3_2 conda-forge \n", + " \u001b[32m+ conda-package-streaming\u001b[0m 0.11.0 pyhd8ed1ab_1 conda-forge \n", + " \u001b[32m+ cpp-expected \u001b[0m 1.1.0 hff21bea_1 conda-forge \n", + " \u001b[32m+ distro \u001b[0m 1.9.0 pyhd8ed1ab_1 conda-forge \n", + " \u001b[32m+ fmt \u001b[0m 11.1.4 h07f6e7f_1 conda-forge \n", + " \u001b[32m+ frozendict \u001b[0m 2.4.6 py312h66e93f0_0 conda-forge \n", + " \u001b[32m+ h2 \u001b[0m 4.2.0 pyhd8ed1ab_0 conda-forge \n", + " \u001b[32m+ hpack \u001b[0m 4.1.0 pyhd8ed1ab_0 conda-forge \n", + " \u001b[32m+ hyperframe \u001b[0m 6.1.0 pyhd8ed1ab_0 conda-forge \n", + " \u001b[32m+ icu \u001b[0m 75.1 he02047a_0 conda-forge \n", + " \u001b[32m+ idna \u001b[0m 3.10 pyhd8ed1ab_1 conda-forge \n", + " \u001b[32m+ jsonpatch \u001b[0m 1.33 pyhd8ed1ab_1 conda-forge \n", + " \u001b[32m+ jsonpointer \u001b[0m 3.0.0 py312h7900ff3_1 conda-forge \n", + " \u001b[32m+ keyutils \u001b[0m 1.6.1 h166bdaf_0 conda-forge \n", + " \u001b[32m+ krb5 \u001b[0m 1.21.3 h659f571_0 conda-forge \n", + " \u001b[32m+ ld_impl_linux-64 \u001b[0m 2.43 h712a8e2_4 conda-forge \n", + " \u001b[32m+ libarchive \u001b[0m 3.7.7 h75ea233_4 conda-forge \n", + " \u001b[32m+ libcurl \u001b[0m 8.13.0 h332b0f4_0 conda-forge \n", + " \u001b[32m+ libedit \u001b[0m 3.1.20250104 pl5321h7949ede_0 conda-forge \n", + " \u001b[32m+ libev \u001b[0m 4.33 hd590300_2 conda-forge \n", + " \u001b[32m+ libexpat \u001b[0m 2.7.0 h5888daf_0 conda-forge \n", + " \u001b[32m+ libffi \u001b[0m 3.4.6 h2dba641_1 conda-forge \n", + " \u001b[32m+ libgcc \u001b[0m 15.1.0 h767d61c_2 conda-forge \n", + " \u001b[32m+ libgcc-ng \u001b[0m 15.1.0 h69a702a_2 conda-forge \n", + " \u001b[32m+ libgomp \u001b[0m 15.1.0 h767d61c_2 conda-forge \n", + " \u001b[32m+ libiconv \u001b[0m 1.18 h4ce23a2_1 conda-forge \n", + " \u001b[32m+ liblzma \u001b[0m 5.8.1 hb9d3cd8_1 conda-forge \n", + " \u001b[32m+ libmamba \u001b[0m 2.1.1 h430c389_0 conda-forge \n", + " \u001b[32m+ libmambapy \u001b[0m 2.1.1 py312h07448e0_0 conda-forge \n", + " \u001b[32m+ libnghttp2 \u001b[0m 1.64.0 h161d5f1_0 conda-forge \n", + " \u001b[32m+ libnsl \u001b[0m 2.0.1 hd590300_0 conda-forge \n", + " \u001b[32m+ libsolv \u001b[0m 0.7.32 h7955e40_2 conda-forge \n", + " \u001b[32m+ libsqlite \u001b[0m 3.49.2 hee588c1_0 conda-forge \n", + " \u001b[32m+ libssh2 \u001b[0m 1.11.1 hcf80075_0 conda-forge \n", + " \u001b[32m+ libstdcxx \u001b[0m 15.1.0 h8f9b012_2 conda-forge \n", + " \u001b[32m+ libstdcxx-ng \u001b[0m 15.1.0 h4852527_2 conda-forge \n", + " \u001b[32m+ libuuid \u001b[0m 2.38.1 h0b41bf4_0 conda-forge \n", + " \u001b[32m+ libxcrypt \u001b[0m 4.4.36 hd590300_1 conda-forge \n", + " \u001b[32m+ libxml2 \u001b[0m 2.13.8 h4bc477f_0 conda-forge \n", + " \u001b[32m+ libzlib \u001b[0m 1.3.1 hb9d3cd8_2 conda-forge \n", + " \u001b[32m+ lz4-c \u001b[0m 1.10.0 h5888daf_1 conda-forge \n", + " \u001b[32m+ lzo \u001b[0m 2.10 hd590300_1001 conda-forge \n", + " \u001b[32m+ mamba \u001b[0m 2.1.1 had4a41a_0 conda-forge \n", + " \u001b[32m+ menuinst \u001b[0m 2.2.0 py312h7900ff3_0 conda-forge \n", + " \u001b[32m+ ncurses \u001b[0m 6.5 h2d0b736_3 conda-forge \n", + " \u001b[32m+ nlohmann_json \u001b[0m 3.11.3 he02047a_1 conda-forge \n", + " \u001b[32m+ openssl \u001b[0m 3.5.0 h7b32b05_1 conda-forge \n", + " \u001b[32m+ packaging \u001b[0m 25.0 pyh29332c3_1 conda-forge \n", + " \u001b[32m+ pip \u001b[0m 25.1.1 pyh8b19718_0 conda-forge \n", + " \u001b[32m+ platformdirs \u001b[0m 4.3.8 pyhe01879c_0 conda-forge \n", + " \u001b[32m+ pluggy \u001b[0m 1.5.0 pyhd8ed1ab_1 conda-forge \n", + " \u001b[32m+ pybind11-abi \u001b[0m 4 hd8ed1ab_3 conda-forge \n", + " \u001b[32m+ pycosat \u001b[0m 0.6.6 py312h66e93f0_2 conda-forge \n", + " \u001b[32m+ pycparser \u001b[0m 2.22 pyh29332c3_1 conda-forge \n", + " \u001b[32m+ pysocks \u001b[0m 1.7.1 pyha55dd90_7 conda-forge \n", + " \u001b[32m+ python \u001b[0m 3.12.10 h9e4cc4f_0_cpython conda-forge \n", + " \u001b[32m+ python_abi \u001b[0m 3.12 7_cp312 conda-forge \n", + " \u001b[32m+ readline \u001b[0m 8.2 h8c095d6_2 conda-forge \n", + " \u001b[32m+ reproc \u001b[0m 14.2.5.post0 hb9d3cd8_0 conda-forge \n", + " \u001b[32m+ reproc-cpp \u001b[0m 14.2.5.post0 h5888daf_0 conda-forge \n", + " \u001b[32m+ requests \u001b[0m 2.32.3 pyhd8ed1ab_1 conda-forge \n", + " \u001b[32m+ ruamel.yaml \u001b[0m 0.18.10 py312h66e93f0_0 conda-forge \n", + " \u001b[32m+ ruamel.yaml.clib \u001b[0m 0.2.8 py312h66e93f0_1 conda-forge \n", + " \u001b[32m+ setuptools \u001b[0m 80.1.0 pyhff2d567_0 conda-forge \n", + " \u001b[32m+ simdjson \u001b[0m 3.12.3 h84d6215_0 conda-forge \n", + " \u001b[32m+ tk \u001b[0m 8.6.13 noxft_h4845f30_101 conda-forge \n", + " \u001b[32m+ tqdm \u001b[0m 4.67.1 pyhd8ed1ab_1 conda-forge \n", + " \u001b[32m+ truststore \u001b[0m 0.10.1 pyh29332c3_0 conda-forge \n", + " \u001b[32m+ tzdata \u001b[0m 2025b h78e105d_0 conda-forge \n", + " \u001b[32m+ urllib3 \u001b[0m 2.4.0 pyhd8ed1ab_0 conda-forge \n", + " \u001b[32m+ wheel \u001b[0m 0.45.1 pyhd8ed1ab_1 conda-forge \n", + " \u001b[32m+ yaml-cpp \u001b[0m 0.8.0 h3f2d84a_0 conda-forge \n", + " \u001b[32m+ zstandard \u001b[0m 0.23.0 py312h66e93f0_2 conda-forge \n", + " \u001b[32m+ zstd \u001b[0m 1.5.7 hb8e6e7a_2 conda-forge \n", + "\n", + " Summary:\n", + "\n", + " Install: 88 packages\n", + "\n", + " Total download: 0 B\n", + "\n", + "─────────────────────────────────────────────────────────────────────────────────────\n", + "\n", + "\n", + "\n", + "Transaction starting\n", + "\u001b[?25l\u001b[2K\u001b[0G[+] 0.0s\n", + "\u001b[2K\u001b[1A\u001b[2K\u001b[0G\u001b[?25hLinking _libgcc_mutex-0.1-conda_forge\n", + "Linking ca-certificates-2025.4.26-hbd8a1cb_0\n", + "Linking ld_impl_linux-64-2.43-h712a8e2_4\n", + "Linking libgomp-15.1.0-h767d61c_2\n", + "Linking pybind11-abi-4-hd8ed1ab_3\n", + "Linking python_abi-3.12-7_cp312\n", + "Linking tzdata-2025b-h78e105d_0\n", + "Linking _openmp_mutex-4.5-2_gnu\n", + "Linking libgcc-15.1.0-h767d61c_2\n", + "Linking c-ares-1.34.5-hb9d3cd8_0\n", + "Linking libexpat-2.7.0-h5888daf_0\n", + "Linking libffi-3.4.6-h2dba641_1\n", + "Linking libgcc-ng-15.1.0-h69a702a_2\n", + "Linking libiconv-1.18-h4ce23a2_1\n", + "Linking liblzma-5.8.1-hb9d3cd8_1\n", + "Linking libstdcxx-15.1.0-h8f9b012_2\n", + "Linking libzlib-1.3.1-hb9d3cd8_2\n", + "Linking ncurses-6.5-h2d0b736_3\n", + "Linking openssl-3.5.0-h7b32b05_1\n", + "Linking reproc-14.2.5.post0-hb9d3cd8_0\n", + "Linking bzip2-1.0.8-h4bc722e_7\n", + "Linking cpp-expected-1.1.0-hff21bea_1\n", + "Linking fmt-11.1.4-h07f6e7f_1\n", + "Linking keyutils-1.6.1-h166bdaf_0\n", + "Linking libedit-3.1.20250104-pl5321h7949ede_0\n", + "Linking libev-4.33-hd590300_2\n", + "Linking libnsl-2.0.1-hd590300_0\n", + "Linking libsolv-0.7.32-h7955e40_2\n", + "Linking libsqlite-3.49.2-hee588c1_0\n", + "Linking libssh2-1.11.1-hcf80075_0\n", + "Linking libstdcxx-ng-15.1.0-h4852527_2\n", + "Linking libuuid-2.38.1-h0b41bf4_0\n", + "Linking libxcrypt-4.4.36-hd590300_1\n", + "Linking lz4-c-1.10.0-h5888daf_1\n", + "Linking lzo-2.10-hd590300_1001\n", + "Linking readline-8.2-h8c095d6_2\n", + "Linking reproc-cpp-14.2.5.post0-h5888daf_0\n", + "Linking simdjson-3.12.3-h84d6215_0\n", + "Linking tk-8.6.13-noxft_h4845f30_101\n", + "Linking yaml-cpp-0.8.0-h3f2d84a_0\n", + "Linking zstd-1.5.7-hb8e6e7a_2\n", + "Linking icu-75.1-he02047a_0\n", + "Linking krb5-1.21.3-h659f571_0\n", + "Linking libnghttp2-1.64.0-h161d5f1_0\n", + "Linking nlohmann_json-3.11.3-he02047a_1\n", + "Linking python-3.12.10-h9e4cc4f_0_cpython\n", + "Linking libcurl-8.13.0-h332b0f4_0\n", + "Linking libxml2-2.13.8-h4bc477f_0\n", + "Linking menuinst-2.2.0-py312h7900ff3_0\n", + "Linking archspec-0.2.5-pyhd8ed1ab_0\n", + "Linking boltons-24.0.0-pyhd8ed1ab_1\n", + "Linking brotli-python-1.1.0-py312h2ec8cdc_2\n", + "Linking certifi-2025.4.26-pyhd8ed1ab_0\n", + "Linking charset-normalizer-3.4.2-pyhd8ed1ab_0\n", + "Linking colorama-0.4.6-pyhd8ed1ab_1\n", + "Linking distro-1.9.0-pyhd8ed1ab_1\n", + "Linking frozendict-2.4.6-py312h66e93f0_0\n", + "Linking hpack-4.1.0-pyhd8ed1ab_0\n", + "Linking hyperframe-6.1.0-pyhd8ed1ab_0\n", + "Linking idna-3.10-pyhd8ed1ab_1\n", + "Linking jsonpointer-3.0.0-py312h7900ff3_1\n", + "Linking libarchive-3.7.7-h75ea233_4\n", + "Linking packaging-25.0-pyh29332c3_1\n", + "Linking platformdirs-4.3.8-pyhe01879c_0\n", + "Linking pluggy-1.5.0-pyhd8ed1ab_1\n", + "Linking pycosat-0.6.6-py312h66e93f0_2\n", + "Linking pycparser-2.22-pyh29332c3_1\n", + "Linking pysocks-1.7.1-pyha55dd90_7\n", + "Linking ruamel.yaml.clib-0.2.8-py312h66e93f0_1\n", + "Linking setuptools-80.1.0-pyhff2d567_0\n", + "Linking truststore-0.10.1-pyh29332c3_0\n", + "Linking wheel-0.45.1-pyhd8ed1ab_1\n", + "Linking cffi-1.17.1-py312h06ac9bb_0\n", + "Linking h2-4.2.0-pyhd8ed1ab_0\n", + "Linking jsonpatch-1.33-pyhd8ed1ab_1\n", + "Linking libmamba-2.1.1-h430c389_0\n", + "Linking pip-25.1.1-pyh8b19718_0\n", + "Linking ruamel.yaml-0.18.10-py312h66e93f0_0\n", + "Linking tqdm-4.67.1-pyhd8ed1ab_1\n", + "Linking libmambapy-2.1.1-py312h07448e0_0\n", + "Linking mamba-2.1.1-had4a41a_0\n", + "Linking zstandard-0.23.0-py312h66e93f0_2\n", + "Linking conda-package-streaming-0.11.0-pyhd8ed1ab_1\n", + "Linking urllib3-2.4.0-pyhd8ed1ab_0\n", + "Linking requests-2.32.3-pyhd8ed1ab_1\n", + "Linking conda-package-handling-2.4.0-pyh7900ff3_2\n", + "Linking conda-25.3.0-py312h7900ff3_0\n", + "Linking conda-libmamba-solver-25.3.0-pyhd8ed1ab_0\n", + "\n", + "Transaction finished\n", + "\n", + "installation finished.\n" + ] + } + ], + "source": [ + "unset PYTHONPATH\n", + "bash $HOME/Miniforge3.sh -b -s -u -p ${CONDA_TARGET_DIR}" + ] + }, + { + "cell_type": "markdown", + "id": "c37ee302-e75c-4cff-9694-ee4921870f7d", + "metadata": {}, + "source": [ + "* 1.4 - Disable automatic activation \n", + "Create `~/.condarc` and add the configuration settings." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "fa14ffbe-e04b-4bea-a3d5-b78cc415f059", + "metadata": {}, + "outputs": [], + "source": [ + "${CONDA_TARGET_DIR}/bin/conda config --set auto_activate_base false" + ] + }, + { + "cell_type": "markdown", + "id": "ae8161d0-ddde-4cd8-b0de-f53acb839caf", + "metadata": {}, + "source": [ + "---\n", + "## 2. Create conda environment" + ] + }, + { + "cell_type": "markdown", + "id": "b1da0745-b29b-4543-a2f6-d6d1a0bd875c", + "metadata": {}, + "source": [ + "Create new conda environment. The following steps can be repeated if multiple environments should be created. If the Python version differ towards the external Python version, a mix of Conda modules and external modules will not be possible" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "cdd6f8cb-c9bc-4392-a8f0-3f142a5e954b", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Channels:\n", + " - conda-forge\n", + "Platform: linux-64\n", + "Collecting package metadata (repodata.json): done\n", + "Solving environment: done\n", + "\n", + "\n", + "==> WARNING: A newer version of conda exists. <==\n", + " current version: 25.3.0\n", + " latest version: 25.5.1\n", + "\n", + "Please update conda by running\n", + "\n", + " $ conda update -n base -c conda-forge conda\n", + "\n", + "\n", + "\n", + "## Package Plan ##\n", + "\n", + " environment location: /p/project1/ccstvs/goebbert1/miniforge3/my_condaenv/envs/my_condaenv\n", + "\n", + " added / updated specs:\n", + " - ipykernel\n", + " - python=3.12.10\n", + "\n", + "\n", + "The following packages will be downloaded:\n", + "\n", + " package | build\n", + " ---------------------------|-----------------\n", + " asttokens-3.0.0 | pyhd8ed1ab_1 28 KB conda-forge\n", + " ca-certificates-2025.6.15 | hbd8a1cb_0 148 KB conda-forge\n", + " comm-0.2.2 | pyhd8ed1ab_1 12 KB conda-forge\n", + " debugpy-1.8.14 | py312h2ec8cdc_0 2.5 MB conda-forge\n", + " decorator-5.2.1 | pyhd8ed1ab_0 14 KB conda-forge\n", + " exceptiongroup-1.3.0 | pyhd8ed1ab_0 21 KB conda-forge\n", + " executing-2.2.0 | pyhd8ed1ab_0 29 KB conda-forge\n", + " importlib-metadata-8.7.0 | pyhe01879c_1 34 KB conda-forge\n", + " ipykernel-6.29.5 | pyh3099207_0 116 KB conda-forge\n", + " ipython-9.3.0 | pyhfa0c392_0 607 KB conda-forge\n", + " ipython_pygments_lexers-1.1.1| pyhd8ed1ab_0 14 KB conda-forge\n", + " jedi-0.19.2 | pyhd8ed1ab_1 824 KB conda-forge\n", + " jupyter_client-8.6.3 | pyhd8ed1ab_1 104 KB conda-forge\n", + " jupyter_core-5.8.1 | pyh31011fe_0 58 KB conda-forge\n", + " ld_impl_linux-64-2.43 | h1423503_5 655 KB conda-forge\n", + " liblzma-5.8.1 | hb9d3cd8_2 110 KB conda-forge\n", + " libsodium-1.0.20 | h4ab18f5_0 201 KB conda-forge\n", + " libsqlite-3.50.1 | hee588c1_0 898 KB conda-forge\n", + " matplotlib-inline-0.1.7 | pyhd8ed1ab_1 14 KB conda-forge\n", + " nest-asyncio-1.6.0 | pyhd8ed1ab_1 11 KB conda-forge\n", + " parso-0.8.4 | pyhd8ed1ab_1 74 KB conda-forge\n", + " pexpect-4.9.0 | pyhd8ed1ab_1 52 KB conda-forge\n", + " pickleshare-0.7.5 | pyhd8ed1ab_1004 11 KB conda-forge\n", + " prompt-toolkit-3.0.51 | pyha770c72_0 265 KB conda-forge\n", + " psutil-7.0.0 | py312h66e93f0_0 455 KB conda-forge\n", + " ptyprocess-0.7.0 | pyhd8ed1ab_1 19 KB conda-forge\n", + " pure_eval-0.2.3 | pyhd8ed1ab_1 16 KB conda-forge\n", + " pygments-2.19.1 | pyhd8ed1ab_0 868 KB conda-forge\n", + " python-dateutil-2.9.0.post0| pyhff2d567_1 217 KB conda-forge\n", + " pyzmq-27.0.0 | py312hbf22597_0 370 KB conda-forge\n", + " setuptools-80.9.0 | pyhff2d567_0 731 KB conda-forge\n", + " six-1.17.0 | pyhd8ed1ab_0 16 KB conda-forge\n", + " stack_data-0.6.3 | pyhd8ed1ab_1 26 KB conda-forge\n", + " tk-8.6.13 |noxft_hd72426e_102 3.1 MB conda-forge\n", + " tornado-6.5.1 | py312h66e93f0_0 831 KB conda-forge\n", + " traitlets-5.14.3 | pyhd8ed1ab_1 107 KB conda-forge\n", + " typing_extensions-4.14.0 | pyhe01879c_0 50 KB conda-forge\n", + " wcwidth-0.2.13 | pyhd8ed1ab_1 32 KB conda-forge\n", + " zeromq-4.3.5 | h3b0a872_7 328 KB conda-forge\n", + " zipp-3.23.0 | pyhd8ed1ab_0 22 KB conda-forge\n", + " ------------------------------------------------------------\n", + " Total: 13.8 MB\n", + "\n", + "The following NEW packages will be INSTALLED:\n", + "\n", + " _libgcc_mutex conda-forge/linux-64::_libgcc_mutex-0.1-conda_forge \n", + " _openmp_mutex conda-forge/linux-64::_openmp_mutex-4.5-2_gnu \n", + " asttokens conda-forge/noarch::asttokens-3.0.0-pyhd8ed1ab_1 \n", + " bzip2 conda-forge/linux-64::bzip2-1.0.8-h4bc722e_7 \n", + " ca-certificates conda-forge/noarch::ca-certificates-2025.6.15-hbd8a1cb_0 \n", + " comm conda-forge/noarch::comm-0.2.2-pyhd8ed1ab_1 \n", + " debugpy conda-forge/linux-64::debugpy-1.8.14-py312h2ec8cdc_0 \n", + " decorator conda-forge/noarch::decorator-5.2.1-pyhd8ed1ab_0 \n", + " exceptiongroup conda-forge/noarch::exceptiongroup-1.3.0-pyhd8ed1ab_0 \n", + " executing conda-forge/noarch::executing-2.2.0-pyhd8ed1ab_0 \n", + " importlib-metadata conda-forge/noarch::importlib-metadata-8.7.0-pyhe01879c_1 \n", + " ipykernel conda-forge/noarch::ipykernel-6.29.5-pyh3099207_0 \n", + " ipython conda-forge/noarch::ipython-9.3.0-pyhfa0c392_0 \n", + " ipython_pygments_~ conda-forge/noarch::ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0 \n", + " jedi conda-forge/noarch::jedi-0.19.2-pyhd8ed1ab_1 \n", + " jupyter_client conda-forge/noarch::jupyter_client-8.6.3-pyhd8ed1ab_1 \n", + " jupyter_core conda-forge/noarch::jupyter_core-5.8.1-pyh31011fe_0 \n", + " keyutils conda-forge/linux-64::keyutils-1.6.1-h166bdaf_0 \n", + " krb5 conda-forge/linux-64::krb5-1.21.3-h659f571_0 \n", + " ld_impl_linux-64 conda-forge/linux-64::ld_impl_linux-64-2.43-h1423503_5 \n", + " libedit conda-forge/linux-64::libedit-3.1.20250104-pl5321h7949ede_0 \n", + " libexpat conda-forge/linux-64::libexpat-2.7.0-h5888daf_0 \n", + " libffi conda-forge/linux-64::libffi-3.4.6-h2dba641_1 \n", + " libgcc conda-forge/linux-64::libgcc-15.1.0-h767d61c_2 \n", + " libgcc-ng conda-forge/linux-64::libgcc-ng-15.1.0-h69a702a_2 \n", + " libgomp conda-forge/linux-64::libgomp-15.1.0-h767d61c_2 \n", + " liblzma conda-forge/linux-64::liblzma-5.8.1-hb9d3cd8_2 \n", + " libnsl conda-forge/linux-64::libnsl-2.0.1-hd590300_0 \n", + " libsodium conda-forge/linux-64::libsodium-1.0.20-h4ab18f5_0 \n", + " libsqlite conda-forge/linux-64::libsqlite-3.50.1-hee588c1_0 \n", + " libstdcxx conda-forge/linux-64::libstdcxx-15.1.0-h8f9b012_2 \n", + " libstdcxx-ng conda-forge/linux-64::libstdcxx-ng-15.1.0-h4852527_2 \n", + " libuuid conda-forge/linux-64::libuuid-2.38.1-h0b41bf4_0 \n", + " libxcrypt conda-forge/linux-64::libxcrypt-4.4.36-hd590300_1 \n", + " libzlib conda-forge/linux-64::libzlib-1.3.1-hb9d3cd8_2 \n", + " matplotlib-inline conda-forge/noarch::matplotlib-inline-0.1.7-pyhd8ed1ab_1 \n", + " ncurses conda-forge/linux-64::ncurses-6.5-h2d0b736_3 \n", + " nest-asyncio conda-forge/noarch::nest-asyncio-1.6.0-pyhd8ed1ab_1 \n", + " openssl conda-forge/linux-64::openssl-3.5.0-h7b32b05_1 \n", + " packaging conda-forge/noarch::packaging-25.0-pyh29332c3_1 \n", + " parso conda-forge/noarch::parso-0.8.4-pyhd8ed1ab_1 \n", + " pexpect conda-forge/noarch::pexpect-4.9.0-pyhd8ed1ab_1 \n", + " pickleshare conda-forge/noarch::pickleshare-0.7.5-pyhd8ed1ab_1004 \n", + " pip conda-forge/noarch::pip-25.1.1-pyh8b19718_0 \n", + " platformdirs conda-forge/noarch::platformdirs-4.3.8-pyhe01879c_0 \n", + " prompt-toolkit conda-forge/noarch::prompt-toolkit-3.0.51-pyha770c72_0 \n", + " psutil conda-forge/linux-64::psutil-7.0.0-py312h66e93f0_0 \n", + " ptyprocess conda-forge/noarch::ptyprocess-0.7.0-pyhd8ed1ab_1 \n", + " pure_eval conda-forge/noarch::pure_eval-0.2.3-pyhd8ed1ab_1 \n", + " pygments conda-forge/noarch::pygments-2.19.1-pyhd8ed1ab_0 \n", + " python conda-forge/linux-64::python-3.12.10-h9e4cc4f_0_cpython \n", + " python-dateutil conda-forge/noarch::python-dateutil-2.9.0.post0-pyhff2d567_1 \n", + " python_abi conda-forge/noarch::python_abi-3.12-7_cp312 \n", + " pyzmq conda-forge/linux-64::pyzmq-27.0.0-py312hbf22597_0 \n", + " readline conda-forge/linux-64::readline-8.2-h8c095d6_2 \n", + " setuptools conda-forge/noarch::setuptools-80.9.0-pyhff2d567_0 \n", + " six conda-forge/noarch::six-1.17.0-pyhd8ed1ab_0 \n", + " stack_data conda-forge/noarch::stack_data-0.6.3-pyhd8ed1ab_1 \n", + " tk conda-forge/linux-64::tk-8.6.13-noxft_hd72426e_102 \n", + " tornado conda-forge/linux-64::tornado-6.5.1-py312h66e93f0_0 \n", + " traitlets conda-forge/noarch::traitlets-5.14.3-pyhd8ed1ab_1 \n", + " typing_extensions conda-forge/noarch::typing_extensions-4.14.0-pyhe01879c_0 \n", + " tzdata conda-forge/noarch::tzdata-2025b-h78e105d_0 \n", + " wcwidth conda-forge/noarch::wcwidth-0.2.13-pyhd8ed1ab_1 \n", + " wheel conda-forge/noarch::wheel-0.45.1-pyhd8ed1ab_1 \n", + " zeromq conda-forge/linux-64::zeromq-4.3.5-h3b0a872_7 \n", + " zipp conda-forge/noarch::zipp-3.23.0-pyhd8ed1ab_0 \n", + "\n", + "\n", + "\n", + "Downloading and Extracting Packages:\n", + "tk-8.6.13 | 3.1 MB | | 0% \n", + "debugpy-1.8.14 | 2.5 MB | | 0% \u001b[A\n", + "\n", + "libsqlite-3.50.1 | 898 KB | | 0% \u001b[A\u001b[A\n", + "\n", + "\n", + "pygments-2.19.1 | 868 KB | | 0% \u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "tornado-6.5.1 | 831 KB | | 0% \u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "jedi-0.19.2 | 824 KB | | 0% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "setuptools-80.9.0 | 731 KB | | 0% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ld_impl_linux-64-2.4 | 655 KB | | 0% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ipython-9.3.0 | 607 KB | | 0% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "psutil-7.0.0 | 455 KB | | 0% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "pyzmq-27.0.0 | 370 KB | | 0% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "zeromq-4.3.5 | 328 KB | | 0% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "prompt-toolkit-3.0.5 | 265 KB | | 0% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "python-dateutil-2.9. | 217 KB | | 0% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "libsodium-1.0.20 | 201 KB | | 0% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ca-certificates-2025 | 148 KB | | 0% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ipykernel-6.29.5 | 116 KB | | 0% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "liblzma-5.8.1 | 110 KB | | 0% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "traitlets-5.14.3 | 107 KB | | 0% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "jupyter_client-8.6.3 | 104 KB | | 0% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "parso-0.8.4 | 74 KB | | 0% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "jupyter_core-5.8.1 | 58 KB | | 0% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "pexpect-4.9.0 | 52 KB | | 0% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " ... (more hidden) ...\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "tk-8.6.13 | 3.1 MB | 3 | 1% \u001b[A\n", + "\n", + "libsqlite-3.50.1 | 898 KB | 6 | 2% \u001b[A\u001b[A\n", + "\n", + "\n", + "pygments-2.19.1 | 868 KB | ##7 | 7% \u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "tk-8.6.13 | 3.1 MB | ##################################3 | 93% \u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "libsqlite-3.50.1 | 898 KB | ##################################### | 100% \u001b[A\u001b[A\n", + "\n", + "\n", + "pygments-2.19.1 | 868 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\n", + "debugpy-1.8.14 | 2.5 MB | ##################################### | 100% \u001b[A\n", + "debugpy-1.8.14 | 2.5 MB | ##################################### | 100% \u001b[A\n", + "\n", + "\n", + "\n", + "tk-8.6.13 | 3.1 MB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "setuptools-80.9.0 | 731 KB | 8 | 2% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "jedi-0.19.2 | 824 KB | 7 | 2% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "setuptools-80.9.0 | 731 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "jedi-0.19.2 | 824 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ld_impl_linux-64-2.4 | 655 KB | 9 | 2% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ipython-9.3.0 | 607 KB | 9 | 3% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "psutil-7.0.0 | 455 KB | #3 | 4% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "psutil-7.0.0 | 455 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ipython-9.3.0 | 607 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ld_impl_linux-64-2.4 | 655 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "pyzmq-27.0.0 | 370 KB | #6 | 4% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "zeromq-4.3.5 | 328 KB | #8 | 5% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "pyzmq-27.0.0 | 370 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "prompt-toolkit-3.0.5 | 265 KB | ##2 | 6% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "libsqlite-3.50.1 | 898 KB | ##################################### | 100% \u001b[A\u001b[A\n", + "\n", + "libsqlite-3.50.1 | 898 KB | ##################################### | 100% \u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "zeromq-4.3.5 | 328 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "prompt-toolkit-3.0.5 | 265 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "python-dateutil-2.9. | 217 KB | ##7 | 7% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ca-certificates-2025 | 148 KB | #### | 11% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "libsodium-1.0.20 | 201 KB | ##9 | 8% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ca-certificates-2025 | 148 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "libsodium-1.0.20 | 201 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "python-dateutil-2.9. | 217 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "liblzma-5.8.1 | 110 KB | #####3 | 15% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ipykernel-6.29.5 | 116 KB | ##### | 14% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ipykernel-6.29.5 | 116 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "liblzma-5.8.1 | 110 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "traitlets-5.14.3 | 107 KB | #####5 | 15% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "traitlets-5.14.3 | 107 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "jupyter_client-8.6.3 | 104 KB | #####7 | 15% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "jupyter_client-8.6.3 | 104 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "parso-0.8.4 | 74 KB | ######## | 22% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "parso-0.8.4 | 74 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "jupyter_core-5.8.1 | 58 KB | ##########1 | 28% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "pexpect-4.9.0 | 52 KB | ###########3 | 31% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "jupyter_core-5.8.1 | 58 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "pexpect-4.9.0 | 52 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " ... (more hidden) ...\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " ... (more hidden) ...\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "tornado-6.5.1 | 831 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "tornado-6.5.1 | 831 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "pygments-2.19.1 | 868 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "pygments-2.19.1 | 868 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\n", + "tk-8.6.13 | 3.1 MB | ##################################### | 100% \u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "setuptools-80.9.0 | 731 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "setuptools-80.9.0 | 731 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "psutil-7.0.0 | 455 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "psutil-7.0.0 | 455 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ld_impl_linux-64-2.4 | 655 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ld_impl_linux-64-2.4 | 655 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ipython-9.3.0 | 607 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ipython-9.3.0 | 607 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "zeromq-4.3.5 | 328 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "zeromq-4.3.5 | 328 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "pyzmq-27.0.0 | 370 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "pyzmq-27.0.0 | 370 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ca-certificates-2025 | 148 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ca-certificates-2025 | 148 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "libsodium-1.0.20 | 201 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "libsodium-1.0.20 | 201 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "python-dateutil-2.9. | 217 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "python-dateutil-2.9. | 217 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "prompt-toolkit-3.0.5 | 265 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "prompt-toolkit-3.0.5 | 265 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "liblzma-5.8.1 | 110 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "liblzma-5.8.1 | 110 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ipykernel-6.29.5 | 116 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ipykernel-6.29.5 | 116 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "traitlets-5.14.3 | 107 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "traitlets-5.14.3 | 107 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "parso-0.8.4 | 74 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "parso-0.8.4 | 74 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "jupyter_client-8.6.3 | 104 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "jupyter_client-8.6.3 | 104 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "jupyter_core-5.8.1 | 58 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "jupyter_core-5.8.1 | 58 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "pexpect-4.9.0 | 52 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "pexpect-4.9.0 | 52 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " ... (more hidden) ...\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " ... (more hidden) ...\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "jedi-0.19.2 | 824 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "jedi-0.19.2 | 824 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + " \u001b[A\n", + "\n", + " \u001b[A\u001b[A\n", + "\n", + "\n", + " \u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + " \u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + " \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\u001b[A\n", + "\n", + "\u001b[A\u001b[A\n", + "\n", + "\n", + "\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", + "Preparing transaction: done\n", + "Verifying transaction: done\n", + "Executing transaction: done\n", + "#\n", + "# To activate this environment, use\n", + "#\n", + "# $ conda activate my_condaenv\n", + "#\n", + "# To deactivate an active environment, use\n", + "#\n", + "# $ conda deactivate\n", + "\n" + ] + } + ], + "source": [ + "${CONDA_TARGET_DIR}/bin/conda create -n ${CONDA_ENV} -y python=3.12.10 ipykernel" + ] + }, + { + "cell_type": "markdown", + "id": "efbc13b9-90c6-4839-b91d-f3eaa31f1878", + "metadata": {}, + "source": [ + "---\n", + "## 3. Create/Edit launch script for the Jupyter kernel" + ] + }, + { + "cell_type": "markdown", + "id": "f9d44329-627f-4ce8-82e4-3b81c0c0deec", + "metadata": {}, + "source": [ + "* 3.1 - Create kernel to allow access to the conda environment. Adapte `module purge` and `PYTHONPATH` according to the comments." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "97bccebb-6628-4cd8-918b-dba896024e1f", + "metadata": {}, + "outputs": [], + "source": [ + "echo '#!/bin/bash\n", + "\n", + "# module purge # optional to disable the external environment, necessary, if python version is different\n", + " \n", + "# Activate your Python virtual environment\n", + "source '\"${CONDA_TARGET_DIR}\"'/bin/activate '\"${CONDA_ENV}\"'\n", + " \n", + "# Ensure python packages installed in conda are always prefered, not necessary if module purge is used\n", + "export PYTHONPATH=${CONDA_PREFIX}/lib/python3.12/site-packages:${PYTHONPATH}\n", + " \n", + "exec python -m ipykernel $@' > ${CONDA_TARGET_DIR}/envs/${CONDA_ENV}/kernel.sh" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "9cf78d43-7164-48bd-860b-18609c070faa", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "/p/project1/ccstvs/goebbert1/miniforge3/my_condaenv/envs/my_condaenv/kernel.sh\n" + ] + } + ], + "source": [ + "chmod +x ${CONDA_TARGET_DIR}/envs/${CONDA_ENV}/kernel.sh\n", + "echo ${CONDA_TARGET_DIR}/envs/${CONDA_ENV}/kernel.sh" + ] + }, + { + "cell_type": "markdown", + "id": "d80e821f-f967-4740-b458-724321b9d7c6", + "metadata": {}, + "source": [ + "---\n", + "## 4. Create/Edit Jupyter kernel configuration" + ] + }, + { + "cell_type": "markdown", + "id": "2377f50c-47de-4027-833e-7371e0c13a89", + "metadata": {}, + "source": [ + "* 4.1 - Create user kernel, if you want to access the conda environment of a colleague, only these steps are necessary" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "5bd4cd14-2a3e-4518-8766-6d8f87643a38", + "metadata": {}, + "outputs": [], + "source": [ + "mkdir -p $HOME/.local/share/jupyter/kernels/conda_${CONDA_ENV}" + ] + }, + { + "cell_type": "markdown", + "id": "05dc2d2f-3666-46a0-9cf8-4dddd7117906", + "metadata": {}, + "source": [ + "* 4.2 - Adjust kernel.json file" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "cd4b11ea-3d80-413e-bf1c-ab11fadae811", + "metadata": {}, + "outputs": [], + "source": [ + "echo '{\n", + " \"argv\": [\n", + " \"'\"${CONDA_TARGET_DIR}\"'/envs/'\"${CONDA_ENV}\"'/kernel.sh\",\n", + " \"-f\",\n", + " \"{connection_file}\"\n", + " ],\n", + " \"display_name\": \"conda_'\"${CONDA_ENV}\"'\",\n", + " \"language\": \"python\",\n", + " \"metadata\": {\n", + " \"debugger\": true\n", + " }\n", + "}' > $HOME/.local/share/jupyter/kernels/conda_${CONDA_ENV}/kernel.json" + ] + }, + { + "cell_type": "markdown", + "id": "28be0835-bfd9-4ad4-bb86-47717e04725d", + "metadata": {}, + "source": [ + "Restart of JupyterLab might be necessary to see the kernel in the kernel selection overview." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Bash", + "language": "bash", + "name": "bash" + }, + "language_info": { + "codemirror_mode": "shell", + "file_extension": ".sh", + "mimetype": "text/x-sh", + "name": "bash" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} -- GitLab