Vai al contenuto principale

Tutorial sui moduli Python: come importarli, scriverli e usarli

Scopri come creare e importare moduli Python. Trova buone pratiche, esempi e consigli per scrivere codice Python riutilizzabile, organizzato ed efficiente!
Aggiornato 29 set 2026  · 8 min leggi

Scopri con l'IA

ChatGPTClaudePerplexity

Quando inizi a imparare Python, scrivi tutto in un unico file. Va bene per gli script piccoli, ma man mano che i programmi crescono, un solo file diventa difficile da leggere, da mantenere e impossibile da riutilizzare tra progetti. La soluzione che Python ti offre sono i moduli.

In questo tutorial imparerai cosa sono i moduli, come importarli, come scriverne di tuoi e le buone pratiche che distinguono gli script da principiante dal codice pronto per la produzione. E prima di iniziare a scrivere i tuoi moduli, ti consiglio di dare un'occhiata al nostro corso Intro to Python for Data Science.

Cosa sono i moduli Python?

Un modulo è semplicemente un file Python. Qualsiasi file con estensione .py che contiene codice Python — funzioni, classi, variabili o logica eseguibile — è un modulo. Quando salvi un file chiamato calculation.py, hai creato un modulo chiamato calculation.

La potenza dei moduli sta nella possibilità di importarli in altri programmi. Invece di copiare e incollare la stessa funzione in più script, la definisci una volta in un modulo e la importi quando ti serve. È esattamente così che funziona la libreria standard di Python: raccolte di moduli predefiniti come math, os e random che puoi includere in qualsiasi programma con una sola riga.

Più nello specifico, in Python incontrerai tre tipi di moduli:

  • Moduli integrati: forniti insieme a Python stesso, come math e os, che ho appena citato.

  • Moduli di terze parti: installati tramite pip, come numpy o pandas.

  • I tuoi moduli: qualunque file .py che scrivi tu.

Importare moduli in Python

Per usare le funzionalità presenti in un modulo, devi importarlo nel programma corrente. Devi usare la parola chiave import insieme al nome del modulo desiderato. Quando l'interprete incontra un'istruzione import, importa il modulo nel tuo programma.

Puoi usare le funzioni all'interno di un modulo usando l'operatore punto (.) insieme al nome del modulo.

Per prima cosa, vediamo come usare i moduli della libreria standard. Nell'esempio qui sotto, il modulo math viene importato nel programma così da poter usare la funzione sqrt().

import math  # Import the math module
num = 4
print(math.sqrt(num))  # Call the sqrt() function from the math module

Per motivi di efficienza, ogni modulo viene importato una sola volta per sessione dell'interprete. Quindi, se modifichi i tuoi moduli, devi riavviare l'interprete.

Se vuoi ricaricare un modulo che hai già importato (ad esempio dopo averlo modificato), usa importlib.reload().

Nota che la vecchia funzione built-in reload() non esiste più in Python 3 — importlib.reload() è il modo attuale e ufficiale per ricaricare i moduli in Python 3.4+

import importlib
importlib.reload(module_name)

Nota: Ricaricare moduli chiave come sys, __main__, builtins e altri non è consigliato. Molti moduli di estensione non sono progettati per essere inizializzati più di una volta e possono fallire in modi imprevedibili quando ricaricati. Limìtati a ricaricare solo i tuoi moduli durante lo sviluppo.

In arrivo: Python sta introducendo i "lazy imports". Questi velocizzeranno l'avvio rimandando il caricamento dei moduli fino al primo utilizzo. È utile perché, soprattutto nei progetti grandi, molti moduli vengono importati all'inizio di un file ma non servono subito.

Come scrivere i tuoi moduli Python

Ora che hai imparato come importare un modulo nel tuo programma, è il momento di scriverne uno tuo e usarlo in un altro programma. Scrivere un modulo è come scrivere qualsiasi altro file Python. Iniziamo scrivendo una funzione per sommare/sottrarre due numeri in un file calculation.py.

def add(x,y):
    return (x+y)
def sub(x,y):
    return (x-y)

Se provi a eseguire questo script dalla riga di comando, non succederà nulla perché non hai detto al programma di fare qualcosa. Crea un altro script Python nella stessa directory con il nome module_test.py e scrivici il seguente codice.

import calculation            #Importing calculation module
print(calculation.add(1,2))   #Calling function defined in the calculation module 

Se esegui module_test.py, vedrai "3" come output. Quando l'interprete ha incontrato l'istruzione import, ha importato il modulo calculation nel tuo codice e poi, usando l'operatore punto, hai potuto accedere alla funzione add().

Proteggere il codice eseguibile con if __name__ == "main__"

C'è un'abitudine importante da acquisire quando scrivi moduli: racchiudere qualsiasi codice che vuoi eseguire solo direttamente (non quando importato) in un blocco if __name__ == "__main__".

# calculation.py
def add(x, y):
    return x + y

def sub(x, y):
    return x - y

if __name__ == "__main__":
    # This only runs when you execute calculation.py directly
    # It will NOT run when another script imports this module
    print(add(1, 2))
 
Quando un modulo viene eseguito direttamente, Python imposta il suo __name__ su "__main__". Quando viene importato da un altro script, __name__ viene impostato invece sul nome del file del modulo. Questo significa che l'istruzione print qui sopra non verrà eseguita inaspettatamente quando qualcuno importa calculation nel proprio programma.

Altri modi per importare moduli in Python

Ci sono altri modi per importare moduli:

  • istruzione from .. import

  • istruzione from .. import *

  • rinominare il modulo importato

Usare from module import name

L'istruzione from..import ti permette di importare funzioni/variabili specifiche da un modulo invece di importare tutto. Nell'esempio precedente, quando hai importato calculation in module_test.py sono state importate sia le funzioni add() che sub(). Ma se nel tuo codice ti servisse solo la funzione add()? Ecco un esempio per illustrare l'uso di from..import.

from calculation import add
print(add(1,2))

Nell'esempio sopra, viene importata e usata solo la funzione add(). Hai notato l'uso di add()? Ora puoi accedervi direttamente senza usare il nome del modulo. Puoi importare anche più attributi, separandoli con una virgola nell'istruzione di import. Guarda il seguente esempio:

from calculation import add,sub

Usare from module import *

Puoi importare tutti gli attributi di un modulo usando questa istruzione. Questo renderà visibili nel tuo codice tutti gli attributi del modulo importato.

Ecco un esempio per illustrare l'uso di from .. import *:

from calculation import *
print(add(1,2))
print(sub(3,2))

Nota che in ambito professionale dovresti evitare di usare from..import e from..import*. Inquinano il tuo namespace con ogni nome presente nel modulo, rendono impossibile capire da dove provenga una funzione leggendo il codice e possono sovrascrivere in modo silenzioso nomi che hai già definito. Preferisci import espliciti.

Rinominare moduli in Python

Puoi rinominare il modulo che stai importando, utile quando vuoi dare un nome più significativo al modulo o quando il nome è troppo lungo da usare ripetutamente. Puoi usare la parola chiave as per rinominarlo. Il seguente esempio spiega come usarla nel tuo programma.

import calculation as cal
print(cal.add(1,2))

Ti sei risparmiato un po' di digitazione rinominando calculation in cal.

Nota che ora non puoi più usare calculation.add(1,2), perché calculation non è più riconosciuto nel tuo programma. Cosa succede: una volta che assegni un alias a un modulo con as, il nome originale non è più disponibile in quello script.

Percorso di ricerca dei moduli in Python

Potresti aver bisogno che i tuoi moduli siano usati in programmi o progetti diversi e la loro posizione fisica nella directory potrebbe variare. Se vuoi usare un modulo che si trova in un'altra directory, Python ti offre alcune opzioni.

Quando importi un modulo chiamato calculation, l'interprete cerca prima un modulo integrato con quel nome. Se non lo trova, cerca un file chiamato calculation.py in un elenco di directory indicato dalla variabile sys.path. sys.path contiene queste posizioni:

  • La directory che contiene lo script di input (o la directory corrente)

  • PYTHONPATH (un elenco di nomi di directory con la stessa sintassi della variabile di shell PATH)

  • Il valore predefinito dipendente dall'installazione

Supponi che module_test.py sia nella directory /home/datacamp/ e che tu abbia spostato calculation.py in /home/test/. Puoi modificare sys.path per includere /home/test/ nell'elenco dei percorsi in cui l'interprete Python cercherà il modulo. Per questo, devi modificare module_test.py nel seguente modo:

import sys
sys.path.append('/home/test/')

import calculation
print(calculation.add(1,2))

File compilati in bytecode in Python

Importare un modulo aumenta il tempo di esecuzione dei programmi, quindi Python ha alcune soluzioni per velocizzare il tutto. Un modo è creare file compilati in bytecode con estensione .pyc.

Internamente, Python converte il codice sorgente in una forma intermedia chiamata bytecode. Poi la traduce nel linguaggio nativo del tuo computer ed esegue il tutto. Questo file .pyc è utile quando importi di nuovo il modulo da un programma diverso: sarà molto più veloce perché una parte dell'elaborazione necessaria per importare un modulo è già stata fatta. Inoltre, questi file compilati in bytecode sono indipendenti dalla piattaforma.

Nota che questi file .pyc vengono di solito creati nella stessa directory dei corrispondenti file .py. Se Python non ha i permessi di scrittura in quella directory, i file .pyc non verranno creati. Questi file sono solitamente archiviati nella directory __pycache__ accanto ai tuoi file .py, con nomi come calculation.cpython-312.pyc che riflettono la versione di Python utilizzata. Puoi tranquillamente ignorare o aggiungere a .gitignore questa cartella. Python la gestisce automaticamente.

La funzione dir() di Python

La funzione dir() viene usata per scoprire tutti i nomi definiti in un modulo. Restituisce un elenco ordinato di stringhe che contengono i nomi definiti in un modulo.

import calculation
print(calculation.add(1,2))
print(dir(calculation))
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'add', 'sub']

Nell'output puoi vedere i nomi delle funzioni che hai definito nel modulo, add e sub. L'attributo __name__ contiene il nome del modulo. Tutti gli attributi che iniziano con un trattino basso sono attributi predefiniti di Python associati a un modulo.

Conclusione

Creare un modulo è fondamentale per una migliore gestione del codice e per il riuso. Python ti mette a disposizione alcuni moduli integrati, che possono essere importati usando la parola chiave import. Python ti permette anche di creare i tuoi moduli e usarli nei tuoi programmi. Per ridurre il costo dell'uso dei moduli, fornisce file compilati in bytecode, che rendono l'esecuzione più veloce. Puoi usare dir() per conoscere gli attributi definiti nel modulo utilizzato in un programma. Questo vale sia per i moduli predefiniti sia per quelli definiti dall'utente.

Se vuoi saperne di più su Python, dai un'occhiata al nostro corso Intermediate Python for Data Science.


Author
Nishant Kumar

FAQ

Posso importare un modulo dentro una funzione?

Sì. Puoi importare moduli all'interno delle funzioni, ma in genere è meglio importarli all'inizio del file per chiarezza e prestazioni.

Cosa succede se due moduli hanno lo stesso nome?

Python importerà la prima corrispondenza che trova nel percorso di ricerca dei moduli (sys.path). Fai attenzione ai nomi per evitare conflitti.

Devo compilare manualmente il mio modulo in .pyc?

No. Python crea automaticamente i file .pyc quando importi un modulo — se i permessi di scrittura sono disponibili.

Come posso verificare da dove viene importato un modulo?

Usa l'attributo __file__ del modulo:

import math
print(math.__file__)

Va bene usare from module import *?

Funziona ma non è consigliato in produzione. Può inquinare il namespace e rendere più difficile capire cosa viene usato.

Posso ricaricare un modulo dopo averlo modificato?

Sì, in una sessione interattiva, usa importlib.reload():

import importlib
import mymodule
importlib.reload(mymodule)
Argomenti
Python

Approfondisci Python con questi corsi!

Corso

Introduzione a Python

4 ore
7.1M
Impara le basi dell’analisi dei dati con Python in sole 4 ore. Questo corso online ti introduce all’interfaccia di Python e ai pacchetti più usati.
Vedi i dettagliRight Arrow
Inizia Il Corso
Mostra altroRight Arrow
Correlato

blog

Tokenizzazione nel NLP: come funziona, sfide e casi d'uso

Guida al preprocessing NLP nel machine learning. Copriamo spaCy, i transformer di Hugging Face e come funziona la tokenizzazione in casi d'uso reali.
Abid Ali Awan's photo

Abid Ali Awan

10 min

blog

Che cos'è Snowflake? Guida per principianti alla piattaforma dati cloud

Esplora le basi di Snowflake, la piattaforma dati cloud. Scopri la sua architettura, le sue funzionalità e come integrarla nelle tue pipeline di dati.
Tim Lu's photo

Tim Lu

12 min

blog

I 15 migliori server MCP remoti che ogni AI builder dovrebbe conoscere nel 2026

Scopri i 15 migliori server MCP remoti che stanno trasformando lo sviluppo AI nel 2026. Scopri come migliorano automazione, ragionamento, sicurezza e velocità dei workflow.
Abid Ali Awan's photo

Abid Ali Awan

15 min

Mostra AltroMostra Altro