From c72bc531a43d14bc9bf35a89eaf28b5941245b38 Mon Sep 17 00:00:00 2001
From: Michael Blaschek <michael.blaschek@univie.ac.at>
Date: Thu, 14 Oct 2021 21:00:42 +0200
Subject: [PATCH] added conda environments

---
 .../QA-007-Restore-Conda-Environments.ipynb   | 634 ++++++++++++++++++
 SRVX1.md                                      |   4 +-
 2 files changed, 636 insertions(+), 2 deletions(-)
 create mode 100644 Python/QA-007-Restore-Conda-Environments.ipynb

diff --git a/Python/QA-007-Restore-Conda-Environments.ipynb b/Python/QA-007-Restore-Conda-Environments.ipynb
new file mode 100644
index 0000000..1368f4e
--- /dev/null
+++ b/Python/QA-007-Restore-Conda-Environments.ipynb
@@ -0,0 +1,634 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "id": "18953a0d-48d2-454f-9402-40cd0aac6bdb",
+   "metadata": {},
+   "source": [
+    "# Restore / Save Conda Environments\n",
+    "\n",
+    "Sometimes it just works and you do not want to change anything.\n",
+    "\n",
+    "This is when you can create an environment file and safe your current python installed packges and versions.\n",
+    "\n",
+    "What you can do:\n",
+    "- Backup an existing environment\n",
+    "- Restore an environment\n",
+    "- Design an environment"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "83eb685d-a53c-4816-86ea-de9501fb9665",
+   "metadata": {},
+   "source": [
+    "# Backup\n",
+    "\n",
+    "It is a good choice to create a backup of a working environment. Regardless if you plan on setting it up somewhere else or not.\n",
+    "\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "id": "e7c0b076-e7d2-48e1-a177-c55a4451040d",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Currently Loaded Modulefiles:\u001b[m\n",
+      " 1) anaconda3/2020.07-gcc-8.4.1   3) proj/8.1.0-gcc-8.4.1  \u001b[m\n",
+      " 2) geos/3.9.1-gcc-8.4.1         \u001b[m\n",
+      "\u001b[K\u001b[?1l\u001b>"
+     ]
+    }
+   ],
+   "source": [
+    "!module list"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "id": "8932eb21-2025-40ec-8744-2730b19455eb",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "# conda environments:\n",
+      "#\n",
+      "                         /home/spack-root/opt/spack/linux-centos8-skylake_avx512/gcc-8.3.1/anaconda3-2020.07-l2bohj4adsd6r2oweeytdzrgqmjl64lt\n",
+      "                         /home/spack-root/opt/spack/linux-centos8-skylake_avx512/gcc-8.3.1/miniconda3-4.8.2-5qezliv3bkrc63cv2zk2lyh3xioozd45\n",
+      "                         /home/spack-root/opt/spack/linux-centos8-skylake_avx512/gcc-8.3.1/miniconda3-4.9.2-htox4jjktvvm7b4d3rfwpwpwa4i2kkhk\n",
+      "                         /home/spack/envs/test\n",
+      "                         /home/swd/anaconda3\n",
+      "                         /home/swd/manual/intelpython/intelpython/latest\n",
+      "                         /home/swd/manual/intelpython/intelpython/latest/envs/2021.4.0\n",
+      "                         /home/swd/spack/opt/spack/linux-rhel8-skylake_avx512/gcc-8.4.1/anaconda2-2019.10-eaw5h5kknfwa3bsjnjhqfhytzfxgd3nf\n",
+      "base                  *  /home/swd/spack/opt/spack/linux-rhel8-skylake_avx512/gcc-8.4.1/anaconda3-2020.07-4onhdcbnvyvwfdxxbelrplxjihjsknex\n",
+      "                         /home/swd/spack/opt/spack/linux-rhel8-skylake_avx512/gcc-8.4.1/anaconda3-2020.11-v46okvjlotnor7yrmpqnbn63xt3a2qyq\n",
+      "                         /home/swd/spack/opt/spack/linux-rhel8-skylake_avx512/gcc-8.4.1/anaconda3-2021.05-hrg2ocjseksc4af3osaiipzu433xctef\n",
+      "                         /home/swd/spack/opt/spack/linux-rhel8-skylake_avx512/gcc-8.4.1/miniconda2-4.7.12.1-3r6cvxekrhf32f6tdeout3aq7xxsgjit\n",
+      "                         /home/swd/spack/opt/spack/linux-rhel8-skylake_avx512/gcc-8.4.1/miniconda3-4.10.3-l23y36yispi4ue5w7mhyc4mllio4ylfm\n",
+      "\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Check What environment are present\n",
+    "# Typically there are some root installed environments\n",
+    "!conda env list"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "6253ef9a-6761-497e-9921-863320f6ae2f",
+   "metadata": {},
+   "source": [
+    "But there is one called **test** in `/home/spack/envs/test` which we are going to backup."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 7,
+   "id": "735145c2-c24d-4006-9751-9c2a5f684387",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "# packages in environment at /home/spack/envs/test:\n",
+      "#\n",
+      "# Name                    Version                   Build  Channel\n",
+      "_libgcc_mutex             0.1                        main  \n",
+      "_openmp_mutex             4.5                       1_gnu  \n",
+      "ca-certificates           2021.9.30            h06a4308_1  \n",
+      "certifi                   2021.10.8        py39h06a4308_0  \n",
+      "ld_impl_linux-64          2.35.1               h7274673_9  \n",
+      "libffi                    3.3                  he6710b0_2  \n",
+      "libgcc-ng                 9.3.0               h5101ec6_17  \n",
+      "libgomp                   9.3.0               h5101ec6_17  \n",
+      "libstdcxx-ng              9.3.0               hd4cf53a_17  \n",
+      "ncurses                   6.2                  he6710b0_1  \n",
+      "openssl                   1.1.1l               h7f8727e_0  \n",
+      "pip                       21.2.4           py39h06a4308_0  \n",
+      "python                    3.9.7                h12debd9_1  \n",
+      "readline                  8.1                  h27cfd23_0  \n",
+      "setuptools                58.0.4           py39h06a4308_0  \n",
+      "sqlite                    3.36.0               hc218d9a_0  \n",
+      "tk                        8.6.11               h1ccaba5_0  \n",
+      "tzdata                    2021a                h5d7bf9c_0  \n",
+      "wheel                     0.37.0             pyhd3eb1b0_1  \n",
+      "xz                        5.2.5                h7b6447c_0  \n",
+      "zlib                      1.2.11               h7b6447c_3  \n"
+     ]
+    }
+   ],
+   "source": [
+    "# Check What is installed inside your environment\n",
+    "!conda list -p /home/spack/envs/test"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 8,
+   "id": "08bcab6f-7056-44ea-8363-af7718c4dd3d",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# Export the definition (versions, packages) to a YAML file\n",
+    "!conda env export -p /home/spack/envs/test > environment.yaml"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 9,
+   "id": "4ec66832-8a9a-446e-ae4a-7de85fad29d7",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "name: null\n",
+      "channels:\n",
+      "  - defaults\n",
+      "dependencies:\n",
+      "  - _libgcc_mutex=0.1=main\n",
+      "  - _openmp_mutex=4.5=1_gnu\n",
+      "  - ca-certificates=2021.9.30=h06a4308_1\n",
+      "  - certifi=2021.10.8=py39h06a4308_0\n",
+      "  - ld_impl_linux-64=2.35.1=h7274673_9\n",
+      "  - libffi=3.3=he6710b0_2\n",
+      "  - libgcc-ng=9.3.0=h5101ec6_17\n",
+      "  - libgomp=9.3.0=h5101ec6_17\n",
+      "  - libstdcxx-ng=9.3.0=hd4cf53a_17\n",
+      "  - ncurses=6.2=he6710b0_1\n",
+      "  - openssl=1.1.1l=h7f8727e_0\n",
+      "  - pip=21.2.4=py39h06a4308_0\n",
+      "  - python=3.9.7=h12debd9_1\n",
+      "  - readline=8.1=h27cfd23_0\n",
+      "  - setuptools=58.0.4=py39h06a4308_0\n",
+      "  - sqlite=3.36.0=hc218d9a_0\n",
+      "  - tk=8.6.11=h1ccaba5_0\n",
+      "  - tzdata=2021a=h5d7bf9c_0\n",
+      "  - wheel=0.37.0=pyhd3eb1b0_1\n",
+      "  - xz=5.2.5=h7b6447c_0\n",
+      "  - zlib=1.2.11=h7b6447c_3\n",
+      "prefix: /home/spack/envs/test\n",
+      "\n"
+     ]
+    }
+   ],
+   "source": [
+    "!cat environment.yaml"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "4f984479-c901-4876-9ea5-b11918336b8d",
+   "metadata": {},
+   "source": [
+    "**Note: Versions and packages are listed. As well as the path where it was installed**\n",
+    "\n",
+    "With that file you will be able to rebuild this environment at anytime.\n",
+    "\n",
+    "If you want to use `pip` later to restore your environment, you can use\n",
+    "```bash\n",
+    "./envs/test/bin/pip list format=freeze > requirements.txt\n",
+    "```\n",
+    "\n",
+    "However, this is quite different from conda. You need to have the correct version of python available otherwise you can not restore the environment."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "5cbfcf62-c832-4a34-9e36-bc0e4244f0c3",
+   "metadata": {},
+   "source": [
+    "## Restore\n",
+    "\n",
+    "Maybe you get a environment file from a colleague or it's your backup, there are ways to restore your environment.\n",
+    "\n",
+    "Please note that conda is slow and resolving dependencies can be slow."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 13,
+   "id": "04145eb1-b368-405e-898c-1694f485b57c",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Collecting package metadata (repodata.json): done\n",
+      "Solving environment: done\n",
+      "\n",
+      "\n",
+      "==> WARNING: A newer version of conda exists. <==\n",
+      "  current version: 4.8.3\n",
+      "  latest version: 4.10.3\n",
+      "\n",
+      "Please update conda by running\n",
+      "\n",
+      "    $ conda update -n base -c defaults conda\n",
+      "\n",
+      "\n",
+      "Preparing transaction: done\n",
+      "Verifying transaction: done\n",
+      "Executing transaction: done\n",
+      "#\n",
+      "# To activate this environment, use\n",
+      "#\n",
+      "#     $ conda activate /home/spack/envs/restore\n",
+      "#\n",
+      "# To deactivate an active environment, use\n",
+      "#\n",
+      "#     $ conda deactivate\n",
+      "\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Create the environment in a special path\n",
+    "!conda env create -p /home/spack/envs/restore -f environment.yaml"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 14,
+   "id": "72e85fe7-ed74-4f1c-974b-b328533b52a0",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "# conda environments:\n",
+      "#\n",
+      "                         /home/spack-root/opt/spack/linux-centos8-skylake_avx512/gcc-8.3.1/anaconda3-2020.07-l2bohj4adsd6r2oweeytdzrgqmjl64lt\n",
+      "                         /home/spack-root/opt/spack/linux-centos8-skylake_avx512/gcc-8.3.1/miniconda3-4.8.2-5qezliv3bkrc63cv2zk2lyh3xioozd45\n",
+      "                         /home/spack-root/opt/spack/linux-centos8-skylake_avx512/gcc-8.3.1/miniconda3-4.9.2-htox4jjktvvm7b4d3rfwpwpwa4i2kkhk\n",
+      "                         /home/spack/envs/restore\n",
+      "                         /home/spack/envs/test\n",
+      "                         /home/swd/anaconda3\n",
+      "                         /home/swd/manual/intelpython/intelpython/latest\n",
+      "                         /home/swd/manual/intelpython/intelpython/latest/envs/2021.4.0\n",
+      "                         /home/swd/spack/opt/spack/linux-rhel8-skylake_avx512/gcc-8.4.1/anaconda2-2019.10-eaw5h5kknfwa3bsjnjhqfhytzfxgd3nf\n",
+      "base                  *  /home/swd/spack/opt/spack/linux-rhel8-skylake_avx512/gcc-8.4.1/anaconda3-2020.07-4onhdcbnvyvwfdxxbelrplxjihjsknex\n",
+      "                         /home/swd/spack/opt/spack/linux-rhel8-skylake_avx512/gcc-8.4.1/anaconda3-2020.11-v46okvjlotnor7yrmpqnbn63xt3a2qyq\n",
+      "                         /home/swd/spack/opt/spack/linux-rhel8-skylake_avx512/gcc-8.4.1/anaconda3-2021.05-hrg2ocjseksc4af3osaiipzu433xctef\n",
+      "                         /home/swd/spack/opt/spack/linux-rhel8-skylake_avx512/gcc-8.4.1/miniconda2-4.7.12.1-3r6cvxekrhf32f6tdeout3aq7xxsgjit\n",
+      "                         /home/swd/spack/opt/spack/linux-rhel8-skylake_avx512/gcc-8.4.1/miniconda3-4.10.3-l23y36yispi4ue5w7mhyc4mllio4ylfm\n",
+      "\n"
+     ]
+    }
+   ],
+   "source": [
+    "!conda env list"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "1ffa23fe-1b8c-45af-9547-6295edcec219",
+   "metadata": {},
+   "source": [
+    "Please note that we have another environment like this, called restore:\n",
+    "`/home/spack/envs/restore`"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 15,
+   "id": "45e09ec6-6670-4dc0-bef1-3dcc1e6504ec",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "# packages in environment at /home/spack/envs/restore:\n",
+      "#\n",
+      "# Name                    Version                   Build  Channel\n",
+      "_libgcc_mutex             0.1                        main  \n",
+      "_openmp_mutex             4.5                       1_gnu  \n",
+      "ca-certificates           2021.9.30            h06a4308_1  \n",
+      "certifi                   2021.10.8        py39h06a4308_0  \n",
+      "ld_impl_linux-64          2.35.1               h7274673_9  \n",
+      "libffi                    3.3                  he6710b0_2  \n",
+      "libgcc-ng                 9.3.0               h5101ec6_17  \n",
+      "libgomp                   9.3.0               h5101ec6_17  \n",
+      "libstdcxx-ng              9.3.0               hd4cf53a_17  \n",
+      "ncurses                   6.2                  he6710b0_1  \n",
+      "openssl                   1.1.1l               h7f8727e_0  \n",
+      "pip                       21.2.4           py39h06a4308_0  \n",
+      "python                    3.9.7                h12debd9_1  \n",
+      "readline                  8.1                  h27cfd23_0  \n",
+      "setuptools                58.0.4           py39h06a4308_0  \n",
+      "sqlite                    3.36.0               hc218d9a_0  \n",
+      "tk                        8.6.11               h1ccaba5_0  \n",
+      "tzdata                    2021a                h5d7bf9c_0  \n",
+      "wheel                     0.37.0             pyhd3eb1b0_1  \n",
+      "xz                        5.2.5                h7b6447c_0  \n",
+      "zlib                      1.2.11               h7b6447c_3  \n"
+     ]
+    }
+   ],
+   "source": [
+    "!conda list -p /home/spack/envs/restore"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "3c241577-5e41-40d8-9b3e-fd8874118d20",
+   "metadata": {},
+   "source": [
+    "When you want to use pip to restore the environment:\n",
+    "```bash\n",
+    "# create a virtual environment\n",
+    "python3 -m venv env\n",
+    "# use that to install the packages\n",
+    "./env/bin/pip install -r requirements.txt\n",
+    "```\n",
+    "\n",
+    "Here it will use the python3 that you give, meaning that it will not be Python 3.9 as we specified above.\n",
+    "Download the correct python interpreter first. [here](https://www.python.org/downloads/) or any other way."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "7b665eb3-d531-4288-9e58-b2e29ec48e74",
+   "metadata": {},
+   "source": [
+    "# Design\n",
+    "It is possible to write your own environment file and use it for build a special environment."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "b23ecff1-a329-42df-b2e6-57cc8d6d480a",
+   "metadata": {},
+   "source": [
+    "There are three things you need:\n",
+    "- name\n",
+    "- channels (mostly conda-forge and defaults)\n",
+    "- dependencies (packages)\n",
+    "\n",
+    "An example yaml file\n",
+    "\n",
+    "```yaml\n",
+    "name: selfdesigned\n",
+    "channels:\n",
+    "- conda-forge\n",
+    "- defaults\n",
+    "dependencies:\n",
+    "- numpy\n",
+    "- pandas\n",
+    "- xarray\n",
+    "- pip:\n",
+    "  - metpy\n",
+    "```\n",
+    "\n",
+    "you can specify versions using `numpy=1.0` or `python=3.6`. If no version is given the newest compatible version will be used."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 16,
+   "id": "fe80dc6b-aa2a-40d2-b73e-67acf5b487c2",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Writing design.yaml\n"
+     ]
+    }
+   ],
+   "source": [
+    "%%writefile design.yaml\n",
+    "name: selfdesigned\n",
+    "channels:\n",
+    "- conda-forge\n",
+    "- defaults\n",
+    "dependencies:\n",
+    "- numpy\n",
+    "- pandas\n",
+    "- xarray\n",
+    "- pip:\n",
+    "  - metpy"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 17,
+   "id": "3d821016-50d6-4696-ac47-06755d57e990",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Warning: you have pip-installed dependencies in your environment file, but you do not list pip itself as one of your conda dependencies.  Conda may not use the correct pip to install your packages, and they may end up in the wrong place.  Please add an explicit pip dependency.  I'm adding one for you, but still nagging you.\n",
+      "Collecting package metadata (repodata.json): done\n",
+      "Solving environment: done\n",
+      "\n",
+      "\n",
+      "==> WARNING: A newer version of conda exists. <==\n",
+      "  current version: 4.8.3\n",
+      "  latest version: 4.10.3\n",
+      "\n",
+      "Please update conda by running\n",
+      "\n",
+      "    $ conda update -n base -c defaults conda\n",
+      "\n",
+      "\n",
+      "\n",
+      "Downloading and Extracting Packages\n",
+      "pandas-1.3.3         | 13.0 MB   | ##################################### | 100% \n",
+      "numpy-1.21.2         | 6.2 MB    | ##################################### | 100% \n",
+      "ncurses-6.2          | 985 KB    | ##################################### | 100% \n",
+      "libcblas-3.9.0       | 11 KB     | ##################################### | 100% \n",
+      "pytz-2021.3          | 242 KB    | ##################################### | 100% \n",
+      "ld_impl_linux-64-2.3 | 667 KB    | ##################################### | 100% \n",
+      "_libgcc_mutex-0.1    | 3 KB      | ##################################### | 100% \n",
+      "sqlite-3.36.0        | 1.4 MB    | ##################################### | 100% \n",
+      "tk-8.6.11            | 3.3 MB    | ##################################### | 100% \n",
+      "pip-21.3             | 1.2 MB    | ##################################### | 100% \n",
+      "libblas-3.9.0        | 12 KB     | ##################################### | 100% \n",
+      "python_abi-3.9       | 4 KB      | ##################################### | 100% \n",
+      "python-3.9.7         | 27.5 MB   | ##################################### | 100% \n",
+      "tzdata-2021c         | 120 KB    | ##################################### | 100% \n",
+      "wheel-0.37.0         | 31 KB     | ##################################### | 100% \n",
+      "libgfortran5-11.2.0  | 1.7 MB    | ##################################### | 100% \n",
+      "zlib-1.2.11          | 86 KB     | ##################################### | 100% \n",
+      "libopenblas-0.3.17   | 9.2 MB    | ##################################### | 100% \n",
+      "libstdcxx-ng-11.2.0  | 4.2 MB    | ##################################### | 100% \n",
+      "libgfortran-ng-11.2. | 19 KB     | ##################################### | 100% \n",
+      "_openmp_mutex-4.5    | 22 KB     | ##################################### | 100% \n",
+      "six-1.16.0           | 14 KB     | ##################################### | 100% \n",
+      "libffi-3.4.2         | 57 KB     | ##################################### | 100% \n",
+      "python-dateutil-2.8. | 240 KB    | ##################################### | 100% \n",
+      "ca-certificates-2021 | 139 KB    | ##################################### | 100% \n",
+      "libgcc-ng-11.2.0     | 887 KB    | ##################################### | 100% \n",
+      "xz-5.2.5             | 343 KB    | ##################################### | 100% \n",
+      "libzlib-1.2.11       | 59 KB     | ##################################### | 100% \n",
+      "xarray-0.19.0        | 614 KB    | ##################################### | 100% \n",
+      "setuptools-58.2.0    | 1011 KB   | ##################################### | 100% \n",
+      "openssl-3.0.0        | 2.9 MB    | ##################################### | 100% \n",
+      "readline-8.1         | 295 KB    | ##################################### | 100% \n",
+      "libgomp-11.2.0       | 427 KB    | ##################################### | 100% \n",
+      "liblapack-3.9.0      | 11 KB     | ##################################### | 100% \n",
+      "Preparing transaction: done\n",
+      "Verifying transaction: done\n",
+      "Executing transaction: done\n",
+      "Ran pip subprocess with arguments:\n",
+      "['/home/spack/envs/design/bin/python', '-m', 'pip', 'install', '-U', '-r', '/home/spack/computer-resources/Python/condaenv.wjxlpjet.requirements.txt']\n",
+      "Pip subprocess output:\n",
+      "Collecting metpy\n",
+      "  Using cached MetPy-1.1.0-py3-none-any.whl (361 kB)\n",
+      "Collecting pooch>=0.1\n",
+      "  Using cached pooch-1.5.2-py3-none-any.whl (57 kB)\n",
+      "Collecting scipy>=1.2.0\n",
+      "  Downloading scipy-1.7.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl (28.5 MB)\n",
+      "Collecting pint>=0.10.1\n",
+      "  Using cached Pint-0.17-py2.py3-none-any.whl (204 kB)\n",
+      "Requirement already satisfied: pandas>=0.24.0 in /home/spack/envs/design/lib/python3.9/site-packages (from metpy->-r /home/spack/computer-resources/Python/condaenv.wjxlpjet.requirements.txt (line 1)) (1.3.3)\n",
+      "Requirement already satisfied: numpy>=1.17.0 in /home/spack/envs/design/lib/python3.9/site-packages (from metpy->-r /home/spack/computer-resources/Python/condaenv.wjxlpjet.requirements.txt (line 1)) (1.21.2)\n",
+      "Collecting matplotlib>=3.0.1\n",
+      "  Downloading matplotlib-3.4.3-cp39-cp39-manylinux1_x86_64.whl (10.3 MB)\n",
+      "Requirement already satisfied: xarray>=0.14.1 in /home/spack/envs/design/lib/python3.9/site-packages (from metpy->-r /home/spack/computer-resources/Python/condaenv.wjxlpjet.requirements.txt (line 1)) (0.19.0)\n",
+      "Collecting traitlets>=4.3.0\n",
+      "  Downloading traitlets-5.1.0-py3-none-any.whl (101 kB)\n",
+      "Collecting pyproj>=2.3.0\n",
+      "  Downloading pyproj-3.2.1-cp39-cp39-manylinux2010_x86_64.whl (6.3 MB)\n",
+      "Collecting pyparsing>=2.2.1\n",
+      "  Using cached pyparsing-2.4.7-py2.py3-none-any.whl (67 kB)\n",
+      "Collecting kiwisolver>=1.0.1\n",
+      "  Downloading kiwisolver-1.3.2-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.6 MB)\n",
+      "Collecting pillow>=6.2.0\n",
+      "  Downloading Pillow-8.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.0 MB)\n",
+      "Requirement already satisfied: python-dateutil>=2.7 in /home/spack/envs/design/lib/python3.9/site-packages (from matplotlib>=3.0.1->metpy->-r /home/spack/computer-resources/Python/condaenv.wjxlpjet.requirements.txt (line 1)) (2.8.2)\n",
+      "Collecting cycler>=0.10\n",
+      "  Downloading cycler-0.10.0-py2.py3-none-any.whl (6.5 kB)\n",
+      "Requirement already satisfied: pytz>=2017.3 in /home/spack/envs/design/lib/python3.9/site-packages (from pandas>=0.24.0->metpy->-r /home/spack/computer-resources/Python/condaenv.wjxlpjet.requirements.txt (line 1)) (2021.3)\n",
+      "Collecting packaging\n",
+      "  Using cached packaging-21.0-py3-none-any.whl (40 kB)\n",
+      "Collecting appdirs\n",
+      "  Using cached appdirs-1.4.4-py2.py3-none-any.whl (9.6 kB)\n",
+      "Collecting requests\n",
+      "  Downloading requests-2.26.0-py2.py3-none-any.whl (62 kB)\n",
+      "Collecting certifi\n",
+      "  Downloading certifi-2021.10.8-py2.py3-none-any.whl (149 kB)\n",
+      "Requirement already satisfied: setuptools>=40.4 in /home/spack/envs/design/lib/python3.9/site-packages (from xarray>=0.14.1->metpy->-r /home/spack/computer-resources/Python/condaenv.wjxlpjet.requirements.txt (line 1)) (58.2.0)\n",
+      "Requirement already satisfied: six in /home/spack/envs/design/lib/python3.9/site-packages (from cycler>=0.10->matplotlib>=3.0.1->metpy->-r /home/spack/computer-resources/Python/condaenv.wjxlpjet.requirements.txt (line 1)) (1.16.0)\n",
+      "Collecting idna<4,>=2.5\n",
+      "  Downloading idna-3.3-py3-none-any.whl (61 kB)\n",
+      "Collecting charset-normalizer~=2.0.0\n",
+      "  Downloading charset_normalizer-2.0.7-py3-none-any.whl (38 kB)\n",
+      "Collecting urllib3<1.27,>=1.21.1\n",
+      "  Downloading urllib3-1.26.7-py2.py3-none-any.whl (138 kB)\n",
+      "Installing collected packages: urllib3, pyparsing, idna, charset-normalizer, certifi, requests, pillow, packaging, kiwisolver, cycler, appdirs, traitlets, scipy, pyproj, pooch, pint, matplotlib, metpy\n",
+      "Successfully installed appdirs-1.4.4 certifi-2021.10.8 charset-normalizer-2.0.7 cycler-0.10.0 idna-3.3 kiwisolver-1.3.2 matplotlib-3.4.3 metpy-1.1.0 packaging-21.0 pillow-8.3.2 pint-0.17 pooch-1.5.2 pyparsing-2.4.7 pyproj-3.2.1 requests-2.26.0 scipy-1.7.1 traitlets-5.1.0 urllib3-1.26.7\n",
+      "\n",
+      "#\n",
+      "# To activate this environment, use\n",
+      "#\n",
+      "#     $ conda activate /home/spack/envs/design\n",
+      "#\n",
+      "# To deactivate an active environment, use\n",
+      "#\n",
+      "#     $ conda deactivate\n",
+      "\n"
+     ]
+    }
+   ],
+   "source": [
+    "!conda env create -f design.yaml -p /home/spack/envs/design"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 18,
+   "id": "c1d727e8-a97f-4809-b695-d10be49e1b4a",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Package            Version\n",
+      "------------------ ---------\n",
+      "appdirs            1.4.4\n",
+      "certifi            2021.10.8\n",
+      "charset-normalizer 2.0.7\n",
+      "cycler             0.10.0\n",
+      "idna               3.3\n",
+      "kiwisolver         1.3.2\n",
+      "matplotlib         3.4.3\n",
+      "MetPy              1.1.0\n",
+      "numpy              1.21.2\n",
+      "packaging          21.0\n",
+      "pandas             1.3.3\n",
+      "Pillow             8.3.2\n",
+      "Pint               0.17\n",
+      "pip                21.3\n",
+      "pooch              1.5.2\n",
+      "pyparsing          2.4.7\n",
+      "pyproj             3.2.1\n",
+      "python-dateutil    2.8.2\n",
+      "pytz               2021.3\n",
+      "requests           2.26.0\n",
+      "scipy              1.7.1\n",
+      "setuptools         58.2.0\n",
+      "six                1.16.0\n",
+      "traitlets          5.1.0\n",
+      "urllib3            1.26.7\n",
+      "wheel              0.37.0\n",
+      "xarray             0.19.0\n"
+     ]
+    }
+   ],
+   "source": [
+    "!/home/spack/envs/design/bin/pip list"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "21a756ab-392b-4238-9272-5494fd8730c8",
+   "metadata": {},
+   "source": [
+    "FIN"
+   ]
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Anaconda3 (2020.07)",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.8.3"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/SRVX1.md b/SRVX1.md
index 754e1a8..2594d01 100644
--- a/SRVX1.md
+++ b/SRVX1.md
@@ -36,7 +36,6 @@ The SRVX1 is the central access point to IMG services:
 goto: [srvx.img.univie.ac.at](https://srvx1.img.univie.ac.at)
 Currently running:
 - TeachingHub
-- ResearchHub
 - Webdata 
 
 ## Jupyterhub
@@ -44,7 +43,8 @@ Currently running:
 
 SRVX1 serves a teaching [jupyterhub](https://jupyterhub.readthedocs.io/en/stable/) with a [jupyterlab](https://jupyterlab.readthedocs.io/en/stable/). It allows easy access for students and teachers.
 
-Goto: [](https://srvx1.img.univie.ac.at/hub)
+Goto: [https://srvx1.img.univie.ac.at/hub](https://srvx1.img.univie.ac.at/hub)
+
 Signup is only granted by teachers and requires a srvx1 user account. A new password is needed and a TOTP (time base one-time password) will be created. 
 
 Download/Use any of these required Authenticator Apps:
-- 
GitLab