> For the complete documentation index, see [llms.txt](https://developer.supervisely.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developer.supervisely.com/app-development/advanced/in-depth-app-development/chapter-1-headless/part-3-site-packages-customize-your-app.md).

# Part 3 — Site Packages \[Customize your app]

### Table of content

1. [Create requirements.txt file in application root](#step-1-create-requirements.txt-file-in-application-root)
2. [Add a list of all required libraries with versions](#step-2-add-a-list-of-all-required-libraries-with-versions)
3. [Add library to code](#step-3-add-library-to-code)
4. [Results](#step-4-results)

### Step 1 — Create `requirements.txt` file in application root

![requirements.txt](/files/UHj3SmipGKpPO6lxCQ6G)

### Step 2 — Add a list of all required libraries with versions

**requirements.txt**

```
tqdm==4.62.0
```

### Step 3 — Add library to code

**src/main.py**

```python
import supervisely_lib as sly
from tqdm import tqdm

worlds = ['Westeros', 'Azeroth', 'Middle Earth', 'Narnia']

sly_logger = sly.logger

try:
    for world in tqdm(worlds):
        sly_logger.info(f'Hello {world}!')

    if 'Our World' not in worlds:
        raise ValueError(f"Can't find Our World")

except Exception as ex:
    sly_logger.warning(ex)
```

### Step 4 — Results

{% embed url="<https://www.youtube.com/watch?v=qKafJi_-zL0>" %}
Site packages
{% endembed %}
