Gestire le dipendenze di spaCy per il Natural Language Processing

banner

Nel mondo dello sviluppo Python, la gestione delle dipendenze è un aspetto cruciale per garantire la riproducibilità e la stabilità dei progetti. In questo articolo, esploreremo come utilizzare efficacemente il file requirements.txt, gestire le versioni delle librerie e installare i modelli per spaCy, una delle librerie più potenti per il Natural Language Processing.

Come si usa il file requirements.txt

Il file requirements.txt è lo standard de facto per specificare le dipendenze di un progetto Python. Questo file di testo semplice contiene l’elenco di tutti i pacchetti necessari per far funzionare correttamente l’applicazione.

Creazione di un file requirements.txt

Per creare un file requirements.txt a partire dall’ambiente attuale, puoi utilizzare pip:

pip freeze > requirements.txt

Questo comando genera automaticamente una lista di tutti i pacchetti installati con le loro versioni esatte.

Struttura e sintassi

Un file requirements.txt tipico ha questa struttura:

numpy==1.24.3
pandas>=1.5.0,<2.0.0
requests~=2.28.0
flask
spacy>=3.4.0

Installazione delle dipendenze

Per installare tutte le dipendenze specificate nel file requirements.txt, usa il seguente comando:

pip install -r requirements.txt

Alcuni consigli da seguire quando si tratta della gestione delle librerie Python sono:

  • Usare ambienti virtuali: Sempre isolare le dipendenze del progetto, così da evitare di avere conflitti all’interno dello stesso ambiente di sviluppo se si usano versioni o librerie diverse.
  • Specifica versioni critiche: Per librerie che cambiano API frequentemente o che sono fondamentali per il progetto, specifica versioni esatte o range di versione ristretti.
  • Mantieni il file aggiornato: Documenta ogni modifica significativa, aggiungendo o rimuovendo pacchetti dal requirements.txt. Eventualmente, …
  • …separa development e production: Considera file separati come requirements-dev.txt

Per esempio, un file ben strutturato che separa le dipendenze di produzione da quelle di sviluppo potrebbe apparire così:

# Core dependencies
flask==2.3.2
sqlalchemy>=1.4.0,<2.0.0
psycopg2-binary==2.9.6

# NLP dependencies
spacy>=3.6.0,<4.0.0
transformers>=4.21.0

# Development dependencies (optional)
pytest>=7.0.0
black>=22.0.0
flake8>=5.0.0

Gestione delle versioni delle librerie

La gestione delle versioni è fondamentale per evitare conflitti di dipendenze e garantire la compatibilità nel tempo.

Operatori di versioning

Python utilizza diversi operatori per specificare i vincoli di versione:

  • == (versione esatta): pandas==1.5.3
  • >= (maggiore o uguale): numpy>=1.20.0
  • <= (minore o uguale): matplotlib<=3.6.0
  • > e <** (maggiore/minore strict): scipy>1.8.0
  • ~= (compatible release): requests~=2.28.0 (equivale a >=2.28.0, ==2.28.*)
  • , (AND logico): django>=3.2,<4.0

Strategie di versioning

1. Pinning esatto

flask==2.3.2
numpy==1.24.3

Pro: Massima riproducibilità Contro: Difficile aggiornamento, possibili vulnerabilità di sicurezza

2. Range semantico

flask>=2.3.0,<3.0.0
numpy>=1.20.0,<2.0.0

Pro: Bilancio tra stabilità e aggiornamenti Contro: Possibili breaking changes minori

3. Compatible release

flask~=2.3.0
numpy~=1.24.0

Pro: Accetta patch e fix automaticamente Contro: Controllo limitato sulle versioni

Gestione dei conflitti

Quando si verificano conflitti di dipendenze, utilizza strumenti come:

# Controlla conflitti
pip check

# Risoluzione guidata con pip-tools
pip install pip-tools
pip-compile requirements.in

Installazione modelli spaCy

spaCy è una libreria avanzata per il Natural Language Processing che richiede modelli linguistici specifici per funzionare efficacemente. Offre diversi modelli pre-addestrati per varie lingue e compiti, modelli che spesso rappresentano un pre-requisito fondamentale per molte applicazioni NLP. Per questo, vediamo come installarli correttamente usando il file requirements.txt.

Tipi di modelli spaCy

spaCy offre diversi tipi di modelli per ogni lingua:

  • sm (small): ~15MB, veloce ma meno accurato
  • md (medium): ~50MB, buon compromesso
  • lg (large): ~500MB, più accurato ma più lento
  • trf (transformer): basato su transformer, massima accuratezza

La scelta del modello dipende dalle esigenze specifiche del progetto. Per installare i modelli nel modo “tradizionale” usando pip, si può seguire questo esempio:

# Modello inglese small
pip install https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.6.0/en_core_web_sm-3.6.0.tar.gz

# Modello inglese medium
pip install https://github.com/explosion/spacy-models/releases/download/en_core_web_md-3.6.0/en_core_web_md-3.6.0.tar.gz

# Modello italiano
pip install https://github.com/explosion/spacy-models/releases/download/it_core_news_sm-3.6.0/it_core_news_sm-3.6.0.tar.gz

Altrimenti, per una maggiore riproducibilità di esecuzione dell’ambiente, è possibile includere modelli spaCy nel requirements.txt:

spacy>=3.6.0,<4.0.0
https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.6.0/en_core_web_sm-3.6.0.tar.gz
https://github.com/explosion/spacy-models/releases/download/it_core_news_sm-3.6.0/it_core_news_sm-3.6.0.tar.gz

A quel punto, sarà sufficiente caricare il modello come mostrato di seguito:


```python
import spacy

# Carica modello inglese
nlp_en = spacy.load("en_core_web_sm")

# Carica modello italiano
nlp_it = spacy.load("it_core_news_sm")

Conclusioni

La corretta gestione delle dipendenze e dei modelli spaCy è essenziale per sviluppare applicazioni Python robuste e scalabili. Utilizzando il file requirements.txt con versioning appropriato e automatizzando l’installazione dei modelli spaCy, puoi garantire che il tuo ambiente di sviluppo sia facilmente riproducibile e mantenibile nel tempo!

Post correlati

TheRedCode.it - Il mondo #tech a piccoli #bit

Partners

Community, aziende e persone che supportano attivamente il blog

Logo di Codemotion
Logo di GrUSP
Logo di Python Milano
Logo di Schrodinger Hat
Logo di Python Biella Group
Logo di Fuzzy Brains
Logo di Django Girls
Logo di Improove
Logo del libro open source
Logo di NgRome
Logo de La Locanda del Tech
Logo di Tomorrow Devs
Logo di DevDojo
Logo di Cloud Native Days 2025

Non perderti gli ultimi aggiornamenti, iscriviti a TheRedCode Digest!

La tecnologia corre, e tu devi correre più veloce per rimanere sempre sul pezzo! 🚀

Riceverai una volta al mese (o anche meno) con codici sconto per partecipare agli eventi del settore, quiz per vincere dei gadget e i recap degli articoli più interessanti pubblicati sul blog

Ci sto!

Vuoi diventare #tech content creator? 🖊️

Se vuoi raccontare la tua sul mondo #tech con dei post a tema o vuoi condividere la tua esperienza con la community, sei nel posto giusto! 😉

Manda una mail a collaborazioni[at]theredcode.it con la tua proposta e diventa la prossima penna del blog!

Ma sì, facciamolo!