# Preinstalled Python libraries in the Eliona system

## Libraries Installed by Default

The following Python libraries are already installed in the Eliona system and are available for your scripts:

* **pytz**: Provides support for time zones in Python.
* **numpy**: A fundamental library for numerical calculations and working with arrays.
* **pandas**: A powerful library for data analysis and manipulation.
* **keras\_tuner**: A library for hyperparameter optimization for deep learning models.
* [**python-eliona-api-client2**](https://github.com/eliona-smart-building-assistant/python-eliona-api-client2/tree/master): A Python client for the Eliona API, installed directly from the GitHub repository. This library enables full access to all Eliona services, allowing you to interact easily with the various functions and data sources of the Eliona system.
* **Python 3.12**: All standard modules and functions of Python version 3.12 are available. [➔ \[External Link\] Python 3.12 Libraries](https://docs.python.org/release/3.12.0/library/index.html)

## Install Additional Python Libraries

{% hint style="info" %}
If you need libraries that are not installed by default, you can add them yourself in the Grafana container (SSR). Proceed as follows:
{% endhint %}

1. **Switch to the container shell**\
   Connect interactively to the SSR container:

   ```bash
   docker exec -it ssr /bin/bash
   ```
2. **Install package**\
   Install the desired Python package into the external target directory:

   ```bash
   pip install --target /ssr/pip_external <package name>
   ```

   * The parameter `--target /ssr/pip_external` ensures that the package is installed in a writable directory outside the core environment.
3. **Restart container**\
   To make the newly installed package available the next time a script is run, restart the container:

   ```bash
   docker restart ssr
   ```
4. **Check available space**\
   By default, `/ssr/pip_external` **1 GB** of storage space is available in the directory. Make sure there is enough free space before installing large packages.

{% hint style="warning" %}
If `pip install` ends with a non-zero return code, this does not automatically indicate an error — if no further error messages are shown, the installation was usually successful.
{% endhint %}
