Python Language
PyInstaller - Distribuzione del codice Python
Ricerca…
Sintassi
- pyinstaller [opzioni] script [script ...] | specfile
Osservazioni
PyInstaller è un modulo utilizzato per raggruppare app python in un unico pacchetto insieme a tutte le dipendenze. L'utente può quindi eseguire l'app del pacchetto senza un interprete python o alcun modulo. Raggruppa correttamente molti pacchetti importanti come numpy, Django, OpenCv e altri.
Alcuni punti importanti da ricordare:
- Pyinstaller supporta Python 2.7 e Python 3.3+
- Pyinstaller è stato testato su Windows, Linux e Mac OS X.
- NON è un cross-compilatore. (Un'app di Windows non può essere impacchettata in Linux. Devi eseguire PyInstaller in Windows per raggruppare un'app per Windows)
Installazione e configurazione
Pyinstaller è un normale pacchetto python. Può essere installato usando pip:
pip install pyinstaller
Installazione in Windows
Per Windows, pywin32 o pypiwin32 è un prerequisito. Quest'ultimo viene installato automaticamente quando pyinstaller viene installato tramite pip.
Installazione in Mac OS X
PyInstaller funziona con il predefinito Python 2.7 fornito con Mac OS X corrente. Se si devono usare versioni successive di Python o se si devono usare pacchetti importanti come PyQT, Numpy, Matplotlib e simili, si consiglia di installarli usando MacPorts o Homebrew .
Installazione dall'archivio
Se pip non è disponibile, scaricare l'archivio compresso da PyPI .
Per testare la versione di sviluppo, scaricare l'archivio compresso dal ramo di sviluppo della pagina Download di PyInstaller .
Espandi l'archivio e trova lo script setup.py
. Esegui python setup.py install
con privilegio di amministratore per installare o aggiornare PyInstaller.
Verifica l'installazione
Il comando pyinstaller
deve esistere sul percorso di sistema per tutte le piattaforme dopo un'installazione corretta.
Verificarlo digitando pyinstaller --version
nella riga di comando. Questo stamperà la versione corrente di pyinstaller.
Utilizzando Pyinstaller
Nel caso d'uso più semplice, vai alla directory in cui si trova il tuo file e digita:
pyinstaller myfile.py
Pyinstaller analizza il file e crea:
- Un file myfile.spec nella stessa directory di
myfile.py
- Una cartella di compilazione nella stessa directory di
myfile.py
- Una cartella dist nella stessa directory di
myfile.py
- Registrare i file nella cartella di build
L'app in bundle può essere trovata nella cartella dist
Opzioni
Esistono diverse opzioni che possono essere utilizzate con pyinstaller. Un elenco completo delle opzioni può essere trovato qui .
Una volta raggruppata, la tua app può essere avviata aprendo "dist \ myfile \ myfile.exe".
Raggruppamento in una cartella
Quando PyInstaller viene utilizzato senza opzioni per il bundle di myscript.py
, l'output predefinito è una singola cartella (di nome myscript
) contenente un eseguibile denominato myscript
( myscript.exe
in Windows) insieme a tutte le dipendenze necessarie.
L'app può essere distribuita comprimendo la cartella in un file zip.
Una modalità cartella può essere impostata in modo esplicito usando l'opzione -D
o --onedir
pyinstaller myscript.py -D
vantaggi:
Uno dei principali vantaggi del raggruppamento in una singola cartella è che è più facile eseguire il debug dei problemi. Se qualche modulo non riesce a importare, può essere verificato ispezionando la cartella.
Un altro vantaggio si sente durante gli aggiornamenti. Se ci sono alcune modifiche nel codice ma le dipendenze utilizzate sono esattamente le stesse, i distributori possono semplicemente spedire il file eseguibile (che è in genere più piccolo dell'intera cartella).
svantaggi
L'unico svantaggio di questo metodo è che gli utenti devono cercare l'eseguibile tra un numero elevato di file.
Inoltre, gli utenti possono cancellare / modificare altri file che potrebbero impedire alla app di funzionare correttamente.
Raggruppamento in un singolo file
pyinstaller myscript.py -F
Le opzioni per generare un singolo file sono -F
o --onefile
. Questo raggruppa il programma in un singolo file myscript.exe
.
Il singolo file eseguibile è più lento del pacchetto a una cartella. Sono anche più difficili da eseguire il debug.