Corso
In questo articolo, ti guiderò attraverso alcuni scenari che giustificano la conversione di un file Python in un eseguibile. Ti mostrerò anche come convertire un file Python in un file eseguibile usando tre librerie Python: Pyinstaller, Nuitka e auto-py-to-exe.
Clona questo repository Github per seguire il tutorial.
Perché convertire Python in .exe?
I file eseguibili - file salvati con l'estensione .exe - vengono usati per installare o eseguire applicazioni software sui computer con sistema operativo Windows. Il file che consente a un computer Windows di eseguire un'applicazione è il file .exe.
Ci sono diversi motivi per cui potresti voler convertire un programma Python in un file eseguibile. Eccone alcuni:
Attività dannose
Purtroppo, alcune persone su internet diffondono software dannoso per infettare i dispositivi altrui e rubarne le informazioni. Un modo per contrastarle è non cadere nelle loro truffe: significa non scaricare o aprire alla cieca file .exe che non provengono da una fonte affidabile.
Accessibilità
Un altro motivo per convertire un file Python in un eseguibile è condividere un'applicazione con altri utenti. Il tipico programma Python può includere diverse dipendenze che un altro utente dovrebbe installare prima di poterlo eseguire. E se la persona non sa programmare? In questi casi, aspettarsi che un utente impari a programmare prima di usare un'app può essere irragionevole. Convertire un file Python in un eseguibile permette agli utenti di accedere al tuo programma senza conoscere Python.
Tutela del codice sorgente
Ma anche se sanno programmare, convertire un file Python in un eseguibile può essere una buona opzione per evitare che il codice venga rubato. Un file eseguibile aiuta a prevenire il furto del codice perché crea una versione compilata del sorgente, più difficile da comprendere rispetto al codice originale.
Pianificazione di job
Potresti anche voler pianificare un job sul tuo computer per eseguire un file .exe a un'ora specifica.
Come convertire uno script Python in un file .exe
Ora che sai cosa sono i file .exe e perché potresti voler convertire un file Python in un file .exe, vediamo come farlo in Python. In questa sezione, tratteremo tre framework: pyinstaller, nuitka e auto-py-to-exe.
Una cosa da tenere a mente è che auto-py-to-exe presenta problemi di compatibilità noti con Python 3.11 e versioni successive, ed è generalmente affidabile solo fino a Python 3.10 a meno che tu non usi versioni specifiche più recenti e dipendenze attentamente allineate.
Detto questo, iniziamo.
Preparare lo script
Questa dimostrazione utilizzerà il dataset New York City Airbnb open data.
Prima che i data scientist possano analizzare un dataset, i dati devono essere formattati per essere compatibili con gli strumenti utilizzati. La creazione di uno schema di validazione definisce in modo dichiarativo tutte le verifiche che si applicano a ciascun campo. Questo processo può essere piuttosto ripetitivo. Per evitare che i nostri data scientist svolgano attività ripetitive, abbiamo creato uno script di validazione automatizzato da eseguire periodicamente.
Nota: fai estrema attenzione quando usi percorsi relativi se il tuo script deve leggere dati. È meglio usare percorsi assoluti per assicurarti che l'eseguibile funzioni come previsto.
import pandas as pd
from pandas.api.types import CategoricalDtype
def perform_validation(filename:str):
"""
A function to validate inputs for NYC Airbnb Open data.
"""
path_to_data = "../.."
data = pd.read_csv(f"{path_to_data}{filename}")
# Convert neighbourhood_group to type category
neighbourhood_group_to_cat = CategoricalDtype(
categories=["Manhattan", "Brooklyn", "Queens", "Bronx", "Staten Island"],
ordered=False
)
data["neighbourhood_group"] = data["neighbourhood_group"].astype(neighbourhood_group_to_cat)
# Convert room_type to type category
room_type_to_cat = CategoricalDtype(
categories=["Entire home/apt", "Private room", "Shared room"],
ordered=False
)
data["room_type"] = data["room_type"].astype(room_type_to_cat)
# Convert last_review to datetime
data["last_review"] = pd.to_datetime(data["last_review"])
# Minimum nights a person can stay is one night
assert data["minimum_nights"].min() >= 1
# Minimum number of reviews is 0
assert data["number_of_reviews"].min() >= 0
# Minimum number of reviews per month
assert data["reviews_per_month"].min() >= 0.00
# Minimum amount of listings per host
assert data["calculated_host_listings_count"].min() >= 1
# Number of days when listing is available for books
# Could be 0 if tennant has long term booking
assert data["availability_365"].min() >= 0
# Save validated data
data.to_csv("validated_ab_nyc_2019.csv", index=False)
if __name__ == "__main__":
# User inputs filename
filename = input("Enter filename: ")
# Ensure it's a string
if not filename.isalpha():
filename = str(filename)
# Automated validation
perform_validation(filename)
Nota: abbiamo copiato e incollato questo script nelle directory pyinstaller, nuitka e auto-py-to-exe.
# Directory structure
| AB_NYC_2019.csv
|
+---auto_py_to_exe
| | requirements.txt
| | validation.py
+---pyinstaller
| requirements.txt
| validation.py
Ogni directory ha il proprio ambiente virtuale in cui abbiamo installato i requisiti: vedi i requisiti di pyinstaller o i requisiti di auto-py-to-exe. Se stai seguendo con il codice, assicurati di creare un ambiente virtuale nella directory pyinstaller e nella directory auto-py-to-exe.
In sintesi, lo script sopra contiene una funzione – scopri di più su come scrivere funzioni in Python – che legge un dataset e poi definisce il formato atteso di specifici campi nei dati. Il passaggio successivo è convertire questo script Python in un file eseguibile che possa essere eseguito periodicamente per generare un dataset formattato.
Metodo 1: Pyinstaller
Pyinstaller ti permette di convertire rapidamente un file Python in un file eseguibile dal terminale. Dopo aver creato l'ambiente virtuale e installato i requisiti per il tuo script (incluso pyinstaller), apri il terminale e vai nella directory in cui si trova il file Python che vuoi convertire.
Il passo successivo è eseguire il seguente comando:
pyinstaller --onefile validation.py
Inizialmente vedrai vari log, l'ultimo dei quali dirà qualcosa come “completed successfully” – se il file eseguibile è stato creato correttamente.

Figura 1: Log che mostrano la creazione del file eseguibile e il completamento con successo.
Al termine dell'esecuzione verranno create due nuove directory, build e dist, nella stessa posizione del file Python. Nella directory dist troverai lo script validation.exe.

Figura 2: Una GIF che mostra l'esecuzione di validation.exe su un dataset.
Per eseguire lo script, fai semplicemente doppio clic su di esso. Si aprirà una console che ti chiederà di inserire il nome del file dei dati su cui vuoi eseguire la validazione. Una volta inserito il nome del file, la console si chiuderà e i dati validati verranno creati nella stessa directory del file validation.exe – vedi Figura 2.
Metodo 2: Nuitka
Nuitka è un altro approccio da considerare. A differenza di PyInstaller, che impacchetta il tuo script Python con l'interprete, Nuitka compila effettivamente il tuo codice Python in codice C. Questo offre una migliore protezione del sorgente, potenzialmente un'esecuzione più veloce e spesso dimensioni dei file più ridotte. Il compromesso è un tempo di compilazione più lungo e una configurazione più complessa.
Installazione e configurazione
Dopo aver creato un ambiente virtuale e installato Nuitka con pip install nuitka, devi assicurarti che sia disponibile un compilatore C sul tuo sistema. Il compilatore necessario dipende dal tuo sistema operativo:
-
Windows: Scarica e installa Microsoft Visual C++ Build Tools (gratuito) dal sito di Visual Studio, oppure usa MinGW
-
macOS: Installa gli Xcode Command Line Tools con
xcode-select --install -
Linux: GCC di solito è preinstallato; in caso contrario, installalo tramite il tuo gestore pacchetti
Una volta installato, Nuitka rileverà automaticamente il compilatore. Se riscontri problemi, assicurati che il compilatore sia nel PATH di sistema.
Conversione dello script di validazione con Nuitka
Convertiamo lo stesso script di validazione NYC Airbnb usando Nuitka, proprio come abbiamo fatto con PyInstaller e auto-py-to-exe. Per compilare lo script in un eseguibile, esegui:
python -m nuitka --onefile --follow-imports --include-package=pandas validation.py
Vediamo il significato di ciascun flag:
-
--onefile: Crea un singolo file eseguibile (invece di una directory con più file e dipendenze) -
--follow-imports: Include automaticamente tutti i moduli importati dal tuo script -
--include-package=pandas: Include esplicitamente il pacchetto pandas (alcuni pacchetti non vengono rilevati automaticamente, quindi questo assicura che sia incluso)
A differenza di PyInstaller, che impiega circa 30 secondi, Nuitka richiederà molto più tempo—tipicamente 5–15 minuti a seconda della complessità del codice e della velocità del sistema. Vedrai l'output di compilazione nel terminale che mostra l'avanzamento nella fase di compilazione C.
Al termine, vedrai un messaggio di successo che indica la creazione dell'eseguibile. L'eseguibile compilato viene creato nella stessa directory del file validation.py.
Fai doppio clic su validation.exe o eseguilo da riga di comando. Si aprirà una finestra della console che ti chiederà di inserire un nome file, proprio come con PyInstaller. Dopo aver digitato AB_NYC_2019.csve premuto invio, la validazione viene eseguita, la console si chiude e viene creato un nuovo file validated_ab_nyc_2019.csv nella stessa directory, esattamente come con la versione PyInstaller.
Metodo 3: auto-py-to-exe
Il primo passo per creare un file eseguibile usando auto-py-to-exe è avviarlo con il seguente comando:
auto-py-to-exe
Questo dovrebbe restituire un'interfaccia grafica (GUI) che ci aiuterà a convertire il file Python in un file eseguibile.

Figura 3: L'interfaccia grafica restituita dopo l'esecuzione del comando auto-py-to-exe.
Nota: se non funziona, assicurati di aver creato un ambiente virtuale nella directory auto-py-to-exe e di aver installato il requirements.txt nel tuo ambiente virtuale con il seguente comando: pip install -r requirements.txt.
La GUI ha diversi campi da compilare. Vediamoli uno per uno:
- Specific Location: in questo campo devi aggiungere il percorso dello script del file Python che vuoi convertire in un eseguibile.
- Onefile: qui selezioni se vuoi creare una singola directory o un singolo file. Una directory conterrà tutte le dipendenze necessarie per eseguire lo script e un file eseguibile, mentre selezionando “One File” verrà creato un unico file eseguibile.
- Console Window: la scelta tra “Console Based” o “Window Based” dipende da ciò che restituisce il tuo script. Ad esempio, lo script che abbiamo creato sopra richiede all'utente di inserire un nome file. Quindi è consigliata la soluzione “Console Based”, poiché aprirà la console dopo l'esecuzione del file eseguibile. Se non fosse necessario mostrare gli output della console dopo l'esecuzione, allora “Window Based” è una buona opzione.
Sono disponibili anche altre opzioni per configurare la creazione del file eseguibile (ad esempio, aggiungere icone, file aggiuntivi e altro). In questa sezione possiamo anche modificare il percorso in cui vogliamo esportare i file generati dal nostro eseguibile: per farlo, seleziona l'opzione “Settings” e scegli la directory di output che preferisci. L'ultimo passaggio è selezionare “Convert .py to .exe” per convertire il file Python.
Guarda la GIF in Figura 4 per vedere come abbiamo configurato il file eseguibile.

Figura 4: Una GIF che mostra la configurazione per auto-py-to-exe
Tornando alla directory auto-py-to-exe, troverai una directory chiamata output: è qui che si trova il nostro file validation.exe. Seleziona il file per eseguirlo: si aprirà una console che ti chiede di inserire un nome file:

Figura 5: Console restituita dall'esecuzione del file di validazione eseguibile.
Inserisci semplicemente il nome del file – in questo esempio, AB_NYC_2019.csv – e premi invio. La console si chiuderà e verrà creato un nuovo file nella directory di output (dove si trova l'eseguibile) chiamato validated_ab_nyc_2019.csv.
PyInstaller vs Nuitka
Questo è il confronto tra Nuitka e PyInstaller sullo stesso script di validazione, con auto-py-to-exe come alternativa GUI:
|
Metrica |
PyInstaller |
auto-py-to-exe |
Nuitka |
|
Dimensione eseguibile |
nella media |
nella media |
20-30% più piccolo |
|
Tempo di build |
nella media |
nella media |
16x più lungo |
|
Tempo di avvio |
~2 secondi |
~2 secondi |
~1 secondo |
|
Tempo di esecuzione (task di validazione) |
~3 secondi |
~3 secondi |
~2,5 secondi |
|
Protezione del codice sorgente |
Moderata |
Moderata |
Eccellente |
|
Python 3.8–3.10 |
✅ Eccellente |
✅ Eccellente |
✅ Eccellente |
|
Python 3.11+ |
✅ Eccellente |
⚠️ Problemi noti |
✅ Eccellente |
PyInstaller e Nuitka offrono entrambi un supporto affidabile su tutte le versioni moderne di Python, mentre auto-py-to-exe presenta problemi di compatibilità noti con Python 3.11 e successivi. Nuitka produce eseguibili più piccoli e veloci, con una protezione della proprietà intellettuale superiore—ma il processo di build è circa 16 volte più lento rispetto a PyInstaller.
Conclusione
In questo articolo hai imparato:
- Cos'è un file Python
- Cos'è un file eseguibile e perché può essere utile
- Come convertire uno script Python in un eseguibile usando pyinstaller, un ottimo strumento per chi è più a suo agio con la riga di comando.
- Come convertire uno script Python in un eseguibile usando auto-py-to-exe, che offre un'interfaccia grafica (GUI) per configurare come creare il file eseguibile.
Scopri di più su come sfruttare Python per fare data science nel percorso di carriera Associate Data Scientist with Python di DataCamp.
FAQ
Posso includere file aggiuntivi (ad es. immagini, file di configurazione) nell'eseguibile?
Sì, tutti e tre gli strumenti ti permettono di includere file aggiuntivi richiesti dallo script. Per PyInstaller e Nuitka, puoi usare l'opzione --add-data per specificare i file da includere. In auto-py-to-exe, nella GUI c'è un'opzione per aggiungere file sotto "Additional Files". Assicurati di specificare correttamente i percorsi relativi o assoluti in modo che l'eseguibile possa accedere a questi file.
Come posso aggiungere un'icona personalizzata al file eseguibile?
Puoi aggiungere un'icona personalizzata al tuo eseguibile specificando un file .ico. Per PyInstaller, usa il flag --icon seguito dal percorso al tuo file .ico. In auto-py-to-exe, puoi impostare il percorso dell'icona nel campo "Icon" all'interno della GUI. Nuitka supporta anche il flag --windows-icon-from-ico. Nota che il file dell'icona deve essere in formato .ico.
Perché il mio file eseguibile è così grande e come posso ridurne la dimensione?
I file eseguibili possono includere tutte le dipendenze, le librerie e l'interprete Python, il che può renderli grandi. Per ridurne la dimensione:
- Usa l'opzione
--onefilein PyInstaller o Nuitka per impacchettare tutto in un singolo file. - Escludi le librerie non necessarie usando l'opzione
--exclude-modulein PyInstaller o Nuitka. - Prendi in considerazione strumenti come UPX per comprimere l'eseguibile risultante (funziona con PyInstaller e auto-py-to-exe).
- Valuta l'uso di Nuitka, che in genere produce eseguibili più piccoli del 20–30% rispetto a PyInstaller.
Posso creare un eseguibile per un sistema operativo diverso?
PyInstaller, auto-py-to-exe e Nuitka sono tutti specifici per piattaforma. Per creare un eseguibile per un altro sistema operativo, devi usare strumenti di cross-compilazione o configurare una macchina virtuale o un container per l'OS di destinazione. Ad esempio, per creare un eseguibile Windows su Linux, puoi usare Wine o Docker con un ambiente Windows.
Quali sono le alternative a pyinstaller e auto-py-to-exe?
Altri strumenti per creare eseguibili includono:
- cx_Freeze: Uno strumento multipiattaforma per creare eseguibili.
- py2exe: Uno strumento specifico per Windows per creare eseguibili da script Python.


