1 14/04/2026 8 min

Se devi lavorare con file YAML in Python, il pacchetto da installare quasi sempre è PyYAML, non un generico “yaml”. Il nome del progetto, il nome del modulo importabile e il nome del pacchetto su PyPI non coincidono sempre: è qui che molti si confondono al primo tentativo. La regola pratica è semplice: con pip installi PyYAML e nel codice importi yaml.

Prima di partire, conviene chiarire l’obiettivo: vuoi aggiungere supporto YAML a un progetto esistente, creare un ambiente pulito per test, oppure sistemare un errore di import in produzione o in CI. La procedura è simile, ma cambiano il livello di attenzione e i controlli finali. Qui sotto trovi il percorso corretto, con verifiche pratiche e qualche nota utile per evitare i classici errori di ambiente.

Il pacchetto giusto da installare

Per leggere e scrivere YAML in Python si usa normalmente PyYAML. Il modulo che userai nel codice è yaml, ma il pacchetto da installare è PyYAML. Questo dettaglio sembra banale, ma in pratica evita installazioni sbagliate come pip install yaml, che non è la scelta corretta per la libreria più diffusa.

La coppia minima da ricordare è questa:

Pacchetto: PyYAML
Import: import yaml

Se il tuo progetto usa Python 3, è preferibile installare con python -m pip invece di richiamare pip direttamente. In ambienti con più interpreti, questa scelta riduce gli errori dovuti a un pip collegato alla versione sbagliata di Python.

Installazione base con pip

Il comando base è questo:

python -m pip install PyYAML

Se vuoi essere esplicito sulla versione di Python, usa il launcher corretto del sistema. Su molte macchine Linux e macOS basta python3, mentre su Windows può essere più affidabile il launcher py.

python3 -m pip install PyYAML
py -m pip install PyYAML

Dopo l’installazione, verifica subito che il modulo sia importabile e che la versione sia quella attesa:

python -c "import yaml; print(yaml.__version__)"

Se il comando restituisce una versione senza errori, l’installazione è andata a buon fine. Se invece compare ModuleNotFoundError, il problema quasi sempre è uno di questi: stai usando un interprete diverso da quello con cui hai installato il pacchetto, stai lavorando dentro un virtual environment non attivato, oppure il pip in uso punta a un’altra installazione di Python.

Usare un virtual environment è la scelta giusta

In un progetto reale, installare globalmente è spesso la strada sbagliata. Un ambiente virtuale isola le dipendenze e rende ripetibile la configurazione. Questo è utile sia in sviluppo sia in CI.

Creazione e attivazione su Linux/macOS:

python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install PyYAML

Su Windows con Prompt o PowerShell:

py -m venv .venv
.venv\Scripts\activate
python -m pip install --upgrade pip
python -m pip install PyYAML

Il vantaggio operativo è concreto: se il progetto si rompe, puoi ricreare l’ambiente in pochi minuti senza sporcare il sistema. In più, quando documenti il setup, il comando è chiaro e non dipende da pacchetti installati a livello globale.

Verifica pratica: import, parsing e serializzazione

Installare il pacchetto non basta: va verificato il comportamento minimo atteso. Il test più semplice è leggere una stringa YAML e convertirla in una struttura Python.

python - <<'PY'
import yaml

text = """
name: web01
roles:
  - app
  - monitoring
enabled: true
"""

data = yaml.safe_load(text)
print(data)
print(type(data))
PY

Il risultato atteso è un dizionario Python con una lista annidata e un booleano correttamente interpretato. In particolare, safe_load è la scelta da preferire quando non hai motivo di eseguire costrutti avanzati del YAML. Riduce il rischio di comportamento indesiderato rispetto a funzioni più permissive.

Per scrivere YAML da una struttura Python, puoi usare safe_dump:

python - <<'PY'
import yaml

data = {
    "name": "web01",
    "roles": ["app", "monitoring"],
    "enabled": True,
}

print(yaml.safe_dump(data, sort_keys=False))
PY

Se l’output ti serve per un file di configurazione leggibile, sort_keys=False evita di riordinare le chiavi. È un dettaglio utile quando vuoi mantenere una struttura coerente con quella del team o con un template già esistente.

Errore comune: installato, ma non importabile

Il caso più frequente in assoluto è questo: pip install PyYAML va a buon fine, ma poi import yaml fallisce. Non è un problema del pacchetto, è quasi sempre un problema di contesto Python.

Le verifiche da fare sono queste:

  1. Controlla quale Python stai usando: python --version o python3 --version.
  2. Controlla quale pip è collegato a quell’interprete: python -m pip --version.
  3. Verifica il path del modulo installato: python -m pip show PyYAML.
  4. Se usi un virtual environment, controlla che sia attivo prima di installare o eseguire il codice.

Un controllo rapido e utile è questo:

python -m pip --version
python -m pip show PyYAML

Se show non restituisce nulla, il pacchetto non è installato in quell’ambiente. Se invece compare un percorso diverso da quello che ti aspetti, hai trovato il classico disallineamento tra interpreter e pip.

Versioni, compatibilità e pinning

In un progetto serio non basta “installare l’ultima versione”. Serve sapere quale versione è stata validata e se il codice dipende da un comportamento specifico della libreria. Per questo è buona pratica fissare la versione nel file dei requisiti.

PyYAML==6.0.2

Il pinning evita sorprese quando una nuova release introduce differenze di parsing, warning o dipendenze transitive. Se lavori in team o distribuisci un’applicazione, il file dei requisiti dovrebbe essere parte del repository, non un appunto locale.

Installazione da file requisiti:

python -m pip install -r requirements.txt

In molti casi il pacchetto YAML è solo una delle dipendenze. Tenere tutto nel file requisiti rende più semplice replicare l’ambiente su una macchina nuova, in una pipeline CI o in un container.

Quando serve evitare il pacchetto sbagliato

Su PyPI puoi trovare nomi simili che confondono chi installa al volo. Il punto non è “quale suona più corretto”, ma quale libreria è davvero usata nel tuo stack. Se il codice che devi mantenere importa yaml, la libreria di riferimento è normalmente PyYAML. Se invece il progetto ha vincoli particolari, verifica sempre la documentazione del framework o dell’applicazione prima di sostituire la dipendenza.

Se stai aggiornando un progetto già esistente, cerca nel codice import e chiamate correlate:

grep -R "import yaml\|from yaml" .

Questo ti dice subito se il progetto usa davvero il modulo yaml e in quali punti. In ambienti grandi, è una verifica più utile di una reinstallazione cieca.

Parsing sicuro e limiti da tenere presenti

YAML è comodo, ma non va trattato come un formato innocuo in assoluto. Se i file provengono da fonti non affidabili, evita di usare parser permissivi quando non servono. La scelta di safe_load è il default ragionevole per la maggior parte dei casi operativi.

Un altro punto spesso sottovalutato è la gestione dei tipi. YAML può interpretare valori come booleani, numeri o date in modo automatico. Questo è utile, ma può creare ambiguità se il file viene scritto da mani diverse o generato da sistemi differenti. Per esempio, una stringa come on o yes può essere trattata come booleano in certi contesti, quindi conviene sempre testare il comportamento concreto del parser nella versione che stai usando.

Se il tuo caso d’uso è la configurazione applicativa, prova sempre un round-trip minimo: carica il YAML, modifica un campo, riserializza e confronta il risultato. È il modo più semplice per scoprire problemi di quoting, indentazione o conversione dei tipi prima che arrivino in produzione.

Esempio completo in un progetto reale

Mettiamo il caso di un servizio che legge un file di configurazione config.yml. La sequenza corretta è questa:

  1. Crei o attivi il virtual environment.
  2. Installi PyYAML con python -m pip install PyYAML.
  3. Verifichi l’import con python -c "import yaml; print(yaml.__version__)".
  4. Carichi il file con yaml.safe_load().
  5. Gestisci gli errori di parsing con un messaggio chiaro e un fallback coerente.

Un frammento minimale può essere questo:

import yaml
from pathlib import Path

config_path = Path("config.yml")

with config_path.open("r", encoding="utf-8") as f:
    config = yaml.safe_load(f)

print(config)

Qui il punto non è la sintassi in sé, ma la disciplina operativa: percorso esplicito, encoding dichiarato, caricamento sicuro e struttura del file controllata. Sono i dettagli che separano uno script che “funziona sul mio PC” da uno usabile davvero in un ambiente condiviso.

Checklist rapida prima di chiudere

Se vuoi evitare di perdere tempo in debug inutile, questa è la sequenza minima da tenere a mente:

  • Installa PyYAML, non yaml.
  • Usa python -m pip per legare installazione e interprete.
  • Verifica con import yaml e stampa della versione.
  • Preferisci safe_load e safe_dump per i casi standard.
  • Fissa la versione nel file requisiti se il progetto deve essere riproducibile.

Se il tuo obiettivo è solo “far partire l’import”, queste cinque righe bastano. Se invece stai preparando una base stabile per un’applicazione, il vero lavoro è controllare l’ambiente Python, la versione della libreria e il modo in cui i dati YAML vengono letti e riscritti nel tempo.

In sintesi operativa: installa PyYAML, importa yaml, verifica l’ambiente, poi congela la versione se il progetto conta davvero. È la strada più corta per evitare errori banali e avere un setup pulito fin dall’inizio.