11 KiB
Italiano
1. Introduzione
PyInstaller GUI Wrapper è un'applicazione desktop che fornisce un'interfaccia grafica utente (GUI) per PyInstaller, un popolare strumento per convertire script Python in applicazioni eseguibili standalone. Questo wrapper mira a semplificare il processo di build, specialmente per progetti che aderiscono a una specifica struttura di directory, e offre funzionalità come l'iniezione automatica delle informazioni di versione.
2. Prerequisiti
Prima di utilizzare PyInstaller GUI Wrapper, assicurati di avere installato quanto segue:
- Python 3.x: Il wrapper è esso stesso un'applicazione Python.
- PyInstaller: Questo è lo strumento principale utilizzato per la compilazione degli eseguibili. Installalo tramite pip:
pip install pyinstaller - Git (Raccomandato): Sebbene opzionale, Git è necessario se desideri che il wrapper estragga automaticamente le informazioni sulla versione (tag, hash dei commit, nomi dei branch) dal repository Git del tuo progetto e le inietti nella tua build.
3. Avvio dell'Applicazione
Se disponi del codice sorgente, puoi eseguire PyInstaller GUI Wrapper dal tuo terminale navigando nella sua directory principale ed eseguendo:
python -m pyinstallerguiwrapper
Se disponi di un eseguibile compilato del wrapper, esegui semplicemente tale eseguibile.
4. Panoramica dell'Interfaccia Principale
La finestra principale di PyInstaller GUI Wrapper è suddivisa in diverse sezioni:
- Directory Progetto:
- Directory Principale Progetto: Un campo di immissione (sola lettura) che mostra il percorso del progetto selezionato.
- Sfoglia...: Un pulsante per aprire una finestra di dialogo per selezionare la directory principale del progetto Python che desideri compilare.
- Percorsi Derivati (Automatici):
- Questa sezione mostra i percorsi che il wrapper tenta automaticamente di trovare in base alla selezione della directory del progetto e alle convenzioni standard. Aiuta a verificare se la struttura del tuo progetto è riconosciuta correttamente.
- Script Trovato: Mostra il percorso al file
__main__.pyrilevato. - File Spec Trovato: Mostra il percorso al file
nomeprogetto.specrilevato. - Icona Trovata: Mostra il percorso al file
nomeprogetto.ico(o equivalente per la piattaforma) rilevato. - Messaggi di stato come "N/A" o "NON TROVATO!" indicheranno se un file non è presente o non è stato possibile localizzarlo.
- Schede Opzioni:
- Opzioni Base (da Spec/GUI):
- Nome App: Il nome della tua applicazione. Può essere derivato dal nome del progetto, caricato da un file
.specesistente o inserito manualmente. - File Icona: Percorso dell'icona dell'applicazione. Può essere rilevato automaticamente, caricato da uno spec o selezionato manualmente usando "Sfoglia...". Il pulsante "Pulisci" rimuove la selezione.
- File Singolo (Unico eseguibile): Casella di controllo corrispondente all'opzione
--onefiledi PyInstaller. Crea un singolo file eseguibile. - Finestra (Nessuna console): Casella di controllo corrispondente all'opzione
--windowed(o--noconsole) di PyInstaller. Per applicazioni GUI che non dovrebbero aprire una finestra di console.
- Nome App: Il nome della tua applicazione. Può essere derivato dal nome del progetto, caricato da un file
- File Aggiuntivi (da Spec/GUI):
- File/Cartelle da includere: Una listbox che mostra file o cartelle da aggiungere al bundle della tua applicazione.
- Aggiungi File...: Apre una finestra di dialogo per selezionare un singolo file da includere.
- Aggiungi Cartella...: Apre una finestra di dialogo per selezionare un'intera cartella da includere.
- Rimuovi Selezionato: Rimuove l'elemento evidenziato dalla lista.
- Quando aggiungi file/cartelle, ti verrà chiesto il percorso di destinazione all'interno del bundle (ad es.
.per la root,data/per una sottocartella). I percorsi sorgente sono memorizzati relativamente alla root del progetto.
- Opzioni Base (da Spec/GUI):
- Log di Build: Un'area di testo che mostra l'output in tempo reale e i messaggi di log dal processo di build di PyInstaller e dal wrapper stesso.
- Crea Eseguibile: Il pulsante di azione principale per avviare il processo di build. È disabilitato fino a quando non viene selezionata una directory di progetto valida con i file essenziali.
5. Flusso di Lavoro: Compilare il Tuo Progetto Python
5.1. Selezionare il Tuo Progetto
- Clicca il pulsante "Sfoglia..." nella sezione "Directory Progetto".
- Naviga e seleziona la directory principale del progetto Python che desideri impacchettare.
- Struttura Progetto Attesa: Il wrapper funziona al meglio con progetti strutturati come segue:
RootDelTuoProgetto/ ├── nomedeltuoprogetto/ # Sottocartella codice sorgente (nome progetto in minuscolo) │ ├── __init__.py │ ├── __main__.py # Entry point principale per la tua applicazione │ └── ... (altri file .py e sotto-package) ├── nomedeltuoprogetto.spec # File spec PyInstaller (opzionale, verrà generato/sovrascritto) └── nomedeltuoprogetto.ico # Icona applicazione (opzionale, estensioni variano per piattaforma)
- Struttura Progetto Attesa: Il wrapper funziona al meglio con progetti strutturati come segue:
- Una volta selezionata, la sezione "Percorsi Derivati" si aggiornerà, mostrando quali dei file attesi sono stati trovati. Se file essenziali come
__main__.pyo il file.spec(se intendi usarne uno esistente che viene poi modificato dalla GUI) non vengono trovati, il pulsante "Crea Eseguibile" potrebbe rimanere disabilitato.
5.2. Generazione Automatica File di Versione (_version.py)
Se la directory del progetto selezionata (RootDelTuoProgetto) è un repository Git:
- Il wrapper tenterà di estrarre le informazioni sulla versione (ultimo tag, hash del commit, branch corrente e stato "dirty" se ci sono modifiche non committate).
- Creerà o sovrascriverà automaticamente un file chiamato
_version.pyall'interno della sottocartella sorgente del tuo progetto (ad es.RootDelTuoProgetto/nomedeltuoprogetto/_version.py). - Questo file
_version.pyconterrà:- Variabili come
__version__,GIT_COMMIT_HASH,GIT_BRANCH,BUILD_TIMESTAMPeIS_GIT_REPO. - Una funzione di supporto
get_version_string(format_string=None)che puoi chiamare dal codice della tua applicazione per ottenere una stringa formattata di queste informazioni sulla versione. - Esempio di segnaposto per
format_string:{{version}},{{tag}},{{commit_short}},{{branch}},{{dirty}},{{timestamp}}.
- Variabili come
- Se la directory del progetto non è un repository Git, o se i comandi Git falliscono,
_version.pyverrà comunque creato ma conterrà valori predefiniti "unknown".
Per utilizzare questo nella tua applicazione, importa _version e chiama _version.get_version_string() o accedi direttamente alle variabili. Vedi il README.md per un esempio.
5.3. Configurare le Opzioni di Build
- Opzioni Base:
- Rivedi e imposta il Nome App.
- Seleziona un File Icona se desiderato (questo sovrascrive qualsiasi icona rilevata automaticamente o icona da uno spec caricato).
- Scegli tra File Singolo (build one-file) o una build in directory (one-dir, deselezionando "File Singolo"). La modalità One-dir è spesso più stabile per applicazioni GUI.
- Seleziona Finestra (Nessuna console) per applicazioni GUI. Deselezionalo per applicazioni basate su console.
- File Aggiuntivi:
- Usa "Aggiungi File..." o "Aggiungi Cartella..." per includere eventuali file di dati necessari, asset o dipendenze non Python.
- Ti verrà richiesto il percorso di destinazione all'interno del bundle dell'applicazione. Ad esempio, se aggiungi
assets/image.pnge specifichi la destinazione comeimages, sarà disponibile nella tua app compilata inimages/image.png. - I percorsi sono relativi al file
.spec(che si trova nella root del tuo progetto).
Nota: Se è stato trovato un file .spec nella root del tuo progetto, le sue opzioni vengono caricate nella GUI. Qualsiasi modifica apportata nella GUI verrà utilizzata per rigenerare e sovrascrivere questo file .spec prima dell'inizio della build.
5.4. Avviare la Build
- Una volta selezionato il progetto e configurato le opzioni, clicca il pulsante "Crea Eseguibile".
- Il wrapper:
- Genererà/aggiornerà il file
_version.pynella cartella sorgente del tuo progetto target. - Genererà/aggiornerà il file
.specnella root del tuo progetto in base alle impostazioni correnti della GUI. - Eseguirà PyInstaller in un thread separato.
- Genererà/aggiornerà il file
- Il Log di Build mostrerà l'output in tempo reale da PyInstaller.
- Al completamento (o fallimento), apparirà una finestra di messaggio e il log di build conterrà lo stato finale.
5.5. Individuare l'Eseguibile
- Se la build ha successo, l'applicazione impacchettata si troverà in una sottocartella chiamata
_dist(per impostazione predefinita) all'interno della directory del progetto selezionata (ad es.RootDelTuoProgetto/_dist/NomeTuaApp/). - I file di build temporanei si troveranno in una sottocartella
_build.
6. Suggerimenti e Risoluzione dei Problemi
- "NON TROVATO!" in Percorsi Derivati: Controlla attentamente la struttura delle cartelle del tuo progetto e la denominazione dei file rispetto alle convenzioni previste. Assicurati che
__main__.pye (se ti affidi a uno esistente) il filenomeprogetto.specsiano posizionati correttamente. - La Build Fallisce / L'Eseguibile Non Parte:
- Controlla il Log di Build: Cerca errori o avvisi da PyInstaller.
- Modalità Console per Debugging: Se il tuo eseguibile non si avvia, modifica temporaneamente il file
.specgenerato (ad es.nomedeltuoprogetto.spec) e cambiaconsole=Falseinconsole=Truenel bloccoEXE(). Quindi, ricompila eseguendopyinstaller nomedeltuoprogetto.spec --cleandalla riga di comando nella root del tuo progetto. Quando esegui l'eseguibile, apparirà una finestra di console che mostrerà eventuali errori Python. - Import Nascosti (Hidden Imports): Alcune librerie Python utilizzano import dinamici che PyInstaller potrebbe non rilevare. Potrebbe essere necessario aggiungerli alla lista
hiddenimportsnel tuo file.speco tramite un file hook.
- Informazioni Git Non Iniettate: Assicurati che Git sia installato e accessibile nel PATH del tuo sistema sulla macchina su cui stai eseguendo PyInstaller GUI Wrapper. Inoltre, assicurati che la directory del progetto selezionata sia effettivamente un repository Git.