.. _installation-page: ************ Installation ************ There are various ways for the installation of ``cait``, which are outlined in the following. We provide stable releases on PyPI, whose source is hosted on the GitLab/GitHub master branch, as well as a development version. In the development version, some new features might still be unstable. It does, however, include all cutting-edge and current implementations. Our recommendation is to use the latest version from PyPI, but we highly appreciate curious users of the development version, who report bugs via the Gitlab/Github issue tracker. .. note:: **Important Note for JupyterHub on computing clusters** In the past, many users experienced issues with our interactive plotting tools which are based on ``plotly`` and ``ipywidgets``. These problems were due to version mismatches between the ``plotly``/``ipywidgets`` packages and their corresponding JupyterLab extensions (which are automatically installed alongside the packages). To not run into such issues in the first place, we recommend one of the following approaches: * Whenever possible, you should **run the cait JupyterHub container** on your computing cluster directly, as it works out of the box. * If you cannot/don't want (for whatever reason) to use the container, you can install ``cait`` in the base environment of your computing cluster's JupyterLab. This is more likely to work right away, but we don't recommend to do so. * To keep things tidy, you should install it in a virtual environment (see below), but you will have to make sure that the same ``plotly``/``ipywidgets`` versions (which are installed as dependencies of ``cait``) are also present in the base environment (because that's where your JupyterHub is running from). A good practice to ensure this is to always pip-upgrade ``plotly``/``ipywidgets`` to the latest version in both environments. Note that you will potentially have to match these versions every time you upgrade ``cait``. Lastly, remember to **restart JupyterHub completely** (not just the kernel) for the changes to take effect. To learn how to add a virtual environment as a kernel to jupyterlab, refer to `this great reference `_. .. note:: **Installation in virtual environments** We recommend to install ``cait`` in a separate environment together with a clean installation of ``jupyter-lab`` (for interactive analysis) to avoid version conflicts of dependencies: .. code:: console $ python3 -m venv venv_cait $ source venv_cait/bin/activate $ python -m pip install —-upgrade pip $ python -m pip install jupyterlab $ deactivate $ source venv_cait/bin/activate $ python -m pip install cait $ deactivate $ source venv_cait/bin/activate $ jupyter-lab If you want, you can add the newly created virtual environment as a kernel for jupyter (such that you don't have to do the last two lines above, i.e. always activate the environment): .. code:: console $ source venv_cait/bin/activate $ python -m pip install ipykernel $ python -m ipykernel install --name=venv_cait You can now choose the kernel in ``jupyter-lab``, VS code, etc. Installation from PyPI ==================================== ``cait`` is hosted on the Python package index (PyPI). .. code:: console $ python -m pip install cait For older or unreleased version, use the installation from Git. There are some additional dependencies which can be installed together with ``cait`` using the following syntax: .. code:: console $ pyton -m pip install cait[, ] - ``remfiles``: Also install libraries needed to access remote files, most prominently using the 'XRootD' protocol. - ``nn``: Install neural network dependencies which are not installed by default to keep Cait more light-weight. - ``clplot``: If you are one of the few people who want to get the 'uniplot' backend for 'cait.versatile' plotting classes, use this optional dependency to unlock command line plotting. - ``test``: Install 'pytest' to run tests. - ``docs``: Install dependencies for building docs with ``sphinx``. Pre-built Docker containers ==================================== For people who have access to the CERN GitLab, the easiest way to get a container is .. code:: console $ singularity pull --docker-login docker://gitlab-registry.cern.ch/cryocluster/cait: where ``tag`` could be ``develop`` or any (tagged) release. For each tag, there is a regular and a ``-slim`` version, where ``-slim`` does not include 'heavy' dependencies like ``torch`` and is therefore smaller in size. If you do not have access to the CERN GitLab, the docker container can be built with this `Dockerfile `_. Refer to the `Docker Documentation `_ on how to use it. Note that we use ``singularity`` to pull and run the container, even though it has been built using Docker. This works and is just a matter of preference. You can use this container e.g. for cluster jobs (see e.g. :ref:`slurm-example-section`) or you can simply run a python session inside the container .. code:: console $ singularity run cait_develop.sif Furthermore, many computing clusters offer the possibility to start **JupyterHub from a custom singularity image**. The container provided above can be used for that purpose as well. Options for developers ====================== As a developer of ``cait``, it's best if you clone the repository and make an *editable installation*: .. code:: console $ git clone https://gitlab.cern.ch/cryocluster/cait.git $ python -m pip install -e cait/ A full copy/paste for installing Cait from the repository (cleanly and reproducably in a virtual environment) is given in the following. We also directly check out the development branch for the most up-to-date features. .. code:: console $ mkdir CAIT $ cd CAIT $ git clone https://gitlab.cern.ch/cryocluster/cait.git $ python3 -m venv venv_cait $ source venv_cait/bin/activate $ python -m pip install —-upgrade pip $ python -m pip install jupyterlab $ deactivate $ source venv_cait/bin/activate $ python -m pip install -e cait/ $ deactivate $ source venv_cait/bin/activate $ python -m pip install ipykernel $ python -m ipykernel install --name=venv_cait $ deactivate $ cd cait $ git checkout develop Deactivating/activating the environment all the time makes sure that the latest changes are recognized by jupyter (and all interactive widgets are properly installed).