migrate from pip to uv for dependency management

- Add pyproject.toml and uv.lock for modern Python packaging
- Update README and Dockerfile to use uv instead of pip
This commit is contained in:
2025-09-04 16:50:04 +02:00
parent bff0f377a1
commit a62e9344f6
5 changed files with 1328 additions and 63 deletions

View File

@@ -1,14 +1,25 @@
# Per ora abbiamo bisogno solo di python, se nel futuro avremo bisogno di pytorch/cuda possiamo sempre tornare indietro
#FROM pytorch/pytorch:2.6.0-cuda12.6-cudnn9-devel
FROM python:3.11-slim
# Vogliamo usare una versione di linux leggera con già uv installato
# Infatti scegliamo l'immagine ufficiale di uv che ha già tutto configurato
# Nel caso in cui si volesse usare un'altra immagine di base che ha magari CUDA
# bisognerebbe installare uv manualmente come descritto nel README
#FROM pytorch/pytorch:2.6.0-cuda12.6-cudnn9-devel # Lo lascio qui nel caso
FROM ghcr.io/astral-sh/uv:python3.12-alpine
# Copio tutti i dati del progetto nella workdir
# (dopo aver definito la workdir mi trovo già in essa)
# Dopo aver definito la workdir mi trovo già in essa
WORKDIR /app
COPY src .
COPY requirements.txt .
COPY LICENSE .
# Installo le dipendenze
RUN pip install --no-cache-dir -r requirements.txt
# Settiamo variabili d'ambiente per usare python del sistema invece che venv
ENV UV_PROJECT_ENVIRONMENT=/usr/local
ENV UV_LINK_MODE=copy
# Copiamo prima i file di configurazione delle dipendenze e installiamo le dipendenze
COPY pyproject.toml ./
COPY uv.lock ./
RUN uv sync --frozen --no-cache
# Copiamo i file sorgente dopo aver installato le dipendenze per sfruttare la cache di Docker
COPY LICENSE .
COPY src ./src
# Comando di default all'avvio dell'applicazione
CMD ["python", "src/app.py"]

View File

@@ -8,38 +8,26 @@ Questa è la repository per l'esame di Applicazioni Intelligenti che consiste in
L'obiettivo di questo progetto è creare un sistema basato su **LLM Agents** e deve dimostrare la capacità di ragionare, adattarsi a eventi esterni e comunicare in modo intelligente.
# Installazione
Per l'installazione si può utilizzare un approccio tramite **pip** (manuale) oppure utilizzare un ambiente **Docker** già pronto (automatico)
Per l'installazione si può utilizzare un approccio tramite **uv** (manuale) oppure utilizzare un ambiente **Docker** già pronto (automatico)
### PIP
**1. Ambiente**: Per prima cosa si deve creare un nuovo environment Python:
### UV
**1. Installazione uv**: Per prima cosa installa uv se non è già presente sul sistema:
```sh
python -m venv .venv
# Windows (PowerShell)
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
# macOS/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
```
**2. Attivare l'ambiente**: dobbiamo usare uno dei seguenti comandi, in base al fatto che siamo su Windows o Unix.
*Nota*: nel caso Windows non faccia partire lo script per policy interne di sicurezza, bisogna far eseguire questo comando prima di attivare l'ambiente virtuale creato:\
``` Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser ```
**2. Ambiente e dipendenze**: uv installerà python e creerà automaticamente l'ambiente virtuale con le dipendenze corrette:
```sh
# Unix
source .venv/bin/activate
# Windows
.venv/Scripts/activate
# Windows (PS)
.venv/Scripts/Activate.ps1
uv sync --frozen --no-cache
```
**3. Dipendenze**: Infine installiamo le dipendenze nell'ambiente appena creato:
**3. Run**: Successivamente si può far partire il progetto tramite il comando:
```sh
python -m pip install -r requirements.txt
```
**4. Run**: Successivamente si può far partire il progetto tramite il comando:
```sh
python src/app.py
uv run python src/app.py
```
### Docker

36
pyproject.toml Normal file
View File

@@ -0,0 +1,36 @@
[project]
name = "upo-app-ai"
version = "0.1.0"
description = "Agente di Pianificazione Viaggi Intelligente"
requires-python = "==3.12.*"
# Qui ho messo alcune librerie utili utilizzate durante il corso.
# Se si nota che alcune non sono necessarie, si potrebbero rimuovere
# in modo da evitare conflitti o problemi futuri.
# Per ogni roba ho fatto un commento per evitare di dimenticarmi cosa fa chi.
# Inoltre ho messo una emoji per indicare se è raccomandato o meno.
dependencies = [
# ✅ per gestire variabili d'ambiente (generalmente API keys o opzioni)
"dotenv",
# 🟡 per fare richieste HTTP
"requests",
# 🟡 per fare scraping di pagine web
"bs4",
# ✅ per fare una UI web semplice con input e output
"gradio",
# 🟡 per fare in modo di ottenere dati validati e strutturati
"pydantic",
# ❌ per l'elaborazione del linguaggio naturale in locale (https://huggingface.co/learn/llm-course/chapter1/3?fw=pt)
"transformers",
# ❌ per interagire con l'API di OpenAI e di altri (basta cambiare il baseurl)
"openai",
# ❌ per fare chiamate a modelli indipendentemente dal modello specifico (astrae meglio rispetto a openai)
"langchain",
# ✅ per costruire agenti (ovvero modelli che possono fare più cose tramite tool) https://github.com/agno-agi/agno
# altamente consigliata dato che ha anche tools integrati per fare scraping, calcoli e molto altro
"agno",
]

View File

@@ -1,29 +0,0 @@
# Qui ho messo alcune librerie utili utilizzate durante il corso.
# Se si nota che alcune non sono necessarie, si potrebbero rimuovere
# in modo da evitare conflitti o problemi futuri.
# Per ogni roba ho fatto un commento per evitare di dimenticarmi cosa fa chi.
# Inoltre ho messo una emoji per indicare se è raccomandato o meno.
# ✅ per gestire variabili d'ambiente (generalmente API keys o opzioni)
dotenv
# 🟡 per fare richieste HTTP
requests
# 🟡 per fare scraping di pagine web
bs4
# ✅ per fare una UI web semplice con input e output
gradio
# 🟡 per fare in modo di ottenere dati validati e strutturati
pydantic
# ❌ per l'elaborazione del linguaggio naturale in locale (https://huggingface.co/learn/llm-course/chapter1/3?fw=pt)
transformers
# ❌ per interagire con l'API di OpenAI e di altri (basta cambiare il baseurl)
openai
# ❌ per fare chiamate a modelli indipendentemente dal modello specifico (astrae meglio rispetto a openai)
langchain
# ✅ per costruire agenti (ovvero modelli che possono fare più cose tramite tool) https://github.com/agno-agi/agno
# altamente consigliata dato che ha anche tools integrati per fare scraping, calcoli e molto altro
agno

1259
uv.lock generated Normal file

File diff suppressed because it is too large Load Diff