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:
31
Dockerfile
31
Dockerfile
@@ -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"]
|
||||
|
||||
36
README.md
36
README.md
@@ -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
36
pyproject.toml
Normal 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",
|
||||
]
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user