Uno script utile che solo chi l'ha scritto sa avviare resta uno strumento personale. Per diventare uno strumento dell'ufficio deve poter essere lanciato da chiunque, senza aprire un terminale, senza ricordare percorsi e senza digitare comandi. Su Windows bastano pochi accorgimenti per arrivarci: un file batch ben scritto, un collegamento sul desktop, e magari la possibilità di trascinare i file da elaborare direttamente sull'icona.
Il file batch come lanciatore
Un file con estensione .bat contiene comandi del prompt di Windows, eseguiti in sequenza con un doppio clic. È il modo più semplice per avvolgere uno script Python:
@echo off
cd /d "%~dp0"
"C:\Python312\python.exe" rinomina_scansioni.py
pause
Ogni riga ha uno scopo preciso:
@echo offevita che i comandi stessi vengano stampati a schermo;cd /d "%~dp0"porta la cartella di lavoro dove si trova il file batch:%~dp0è il percorso della cartella del file stesso, e/dpermette di cambiare anche unità. Così i percorsi relativi nello script funzionano sempre;- il percorso completo dell'interprete evita dipendenze da come è configurato il computer;
pausetiene aperta la finestra alla fine, con il messaggio «Premere un tasto per continuare».
L'ultima riga è più importante di quanto sembri. Senza di essa, se lo script fallisce, la finestra si chiude istantaneamente e l'utente vede solo un lampo nero, senza sapere che cosa sia successo.
Trascinare i file sull'icona
Un'interfaccia molto intuitiva è il trascinamento: si selezionano alcuni file in Esplora file e li si rilascia sull'icona del file batch. Windows passa i percorsi come argomenti, che il batch inoltra allo script con %*:
"C:\Python312\python.exe" "%~dp0converti_pdf.py" %*
Nello script Python i percorsi arrivano nella lista sys.argv, a partire dal secondo elemento:
import sys
from pathlib import Path
for argomento in sys.argv[1:]:
file = Path(argomento)
print("Elaboro", file.name)
Notate che in questa versione si usa %~dp0 davanti al nome dello script invece del comando cd: quando si trascinano file, conviene non cambiare cartella prima di aver letto gli argomenti, e indicare il percorso dello script in modo assoluto è più sicuro.
Il menu «Invia a»
Per uno strumento usato spesso, il menu contestuale è ancora più comodo. Digitando shell:sendto nella finestra Esegui (Win+R) si apre la cartella che contiene le voci del menu Invia a. Copiando lì un collegamento al file batch, lo script diventa disponibile facendo clic destro su qualsiasi file. Su Windows 11 il menu Invia a si trova sotto Mostra altre opzioni.
Un collegamento con icona e scorciatoia
Il file batch può restare nella sua cartella insieme allo script, mentre sul desktop si mette un collegamento. Dalle proprietà del collegamento si possono:
| Impostazione | Utilità |
|---|---|
| Cambia icona | Rendere lo strumento riconoscibile |
| Tasto di scelta rapida | Avviarlo con una combinazione come Ctrl+Alt+R |
| Esegui: ridotta a icona | Non mostrare la finestra per script che non hanno output |
| Commento | Descrizione che compare passando il mouse sopra l'icona |
Ambienti virtuali
Se lo script usa librerie installate in un ambiente virtuale, il batch deve usare l'interprete di quell'ambiente, che si trova nella sottocartella Scripts dell'ambiente stesso:
"%~dp0.venv\Scripts\python.exe" "%~dp0estrai_tabelle.py" %*
In questo modo lo strumento usa sempre le versioni delle librerie con cui è stato collaudato, indipendentemente da ciò che è installato nel resto del sistema.
Creare un eseguibile
Quando lo strumento deve funzionare su computer dove Python non è installato, si può trasformare lo script in un file .exe con PyInstaller:
pip install pyinstaller
pyinstaller --onefile converti_pdf.py
Il risultato, nella cartella dist, contiene l'interprete e le librerie necessarie. È comodo, ma ha alcuni svantaggi: il file è piuttosto grande, l'avvio della versione --onefile è più lento perché deve estrarre i componenti, e alcuni antivirus segnalano con sospetto gli eseguibili creati in questo modo. Inoltre ogni modifica allo script richiede di ricreare l'eseguibile. Nel mio lavoro lo riservo agli strumenti stabili; per quelli che cambiano spesso preferisco il file batch con un ambiente virtuale in una cartella condivisa.
E su macOS?
L'equivalente del file batch è un file di testo con estensione .command, contenente gli stessi comandi che si scriverebbero nel Terminale. Va reso eseguibile una volta con chmod +x nome.command; da quel momento si avvia con un doppio clic e apre una finestra del Terminale.
In sintesi
- Un file
.batconcd /d "%~dp0"epauserende uno script avviabile da chiunque. %*permette di trascinare file sull'icona; lo script li legge dasys.argv.- Il menu Invia a e i collegamenti con scorciatoia rendono lo strumento sempre a portata.
- Usate l'interprete dell'ambiente virtuale per avere librerie collaudate.
- PyInstaller crea eseguibili per computer senza Python, con qualche compromesso.