PyInstaller Primo Contatto – tutorial per Windows

Introduzione

A dispetto del nome, PyInstaller non crea programmi di installazione stile wizard familiari a molti utenti Windows, è piuttosto uno strumento in grado di “impacchettare” degli scripts Python all’interno di un programma eseguibile su varie piattaforme (ad oggi Windows, Linux, Max OsX, Irix). Il progetto nasce dalle ceneri di Python Installer, scritto da Gordon McMillan nel 2002; dal 2005 lo sviluppo è curato dagli attuali mantainers. PyInstaller offre delle funzionalità peculiari che altri strumenti analoghi non hanno, su tutte il supporto nativo per una lunga lista di moduli terze parti ed una flessibilità che consente ai più smaliziati il controllo pressochè totale del processo di costruzione dell’eseguibile.

Requisiti

Per completare il tutorial è necessario avere a disposizione i programmi seguenti (o un loro equivalente):

CPython 2.x
TortoiseSVN 1.6.2

Installazione

PyInstaller ha uno sviluppo piuttosto agile e le modifiche arrivano in continuazione, quasi giorno per giorno: per queso gli sviluppatori hanno optato per un modello di distribuzione “alla Django”, che consiste nel mantenere la HEAD del repository SVN sufficientemente stabile da farne la versione ufficiale. E’ disponibile anche una release ufficiale, la 1.3,  con i relativi pacchetti di installazione ma è ormai diventata obsoleta e se ne sconsiglia l’utilizzo. Per l’installazione si procede quindi recuperando i files direttamente dal repository SVN all’indirizzo http://svn.pyinstaller.org/trunk, il che per gli utenti di TortoiseSVN consiste in pochi passi:
Apriamo in una finestra la directory dove vogliamo posizionare la cartella contenente l’installazione di PyInstaller, ad esempio C:\sviluppo, facciamo click con il tasto destro del mouse e selezioniamo la voce “SVN Checkout…”

TortoiseSVN Checkout

Nella dialog che comparirà successivamente copiamo l’URL del repository nella apposita casella di testo, specificando il percorso C:\sviluppo\pyinstaller nel campo “Checkout directory”, lasciamo il resto inalterato e premiamo “OK”.

TortoiseSVN

TortoiseSVN recupererà tutti i files necessari: l’installazione per Windows a questo punto è praticamente completata, manca solo la fase di configurazione.

Configurazione

PyInstaller necessita di alcune informazioni circa il nostro sistema: qual’è la versione di Python in uso e dove è installato l’interprete, qual’è la piattaforma corrente, sapere se alcuni strumenti di supporto sono disponibili o meno e così via. Tutte queste informazioni sono contenute in un file di testo chiamato config ma, tolti i curiosi e gli utenti avanzati, l’utente medio può tranquillamente ignorare il suo contenuto e la sua creazione; il file infatti viene generato da uno script Python che si occupa di ricavare tutte le informazioni necessarie e di scriverle al suo interno. Nella cartella di PyInstaller localizziamo lo script Configure.py ed eseguiamolo (dato che lo script non prende parametri può bastare un doppio click sull’icona corrispondente): al termine dell’esecuzione, all’interno della cartella troveremo (insieme ad altri files) il nostro config. L’installazione è completa, possiamo cominciare a generare i nostri eseguibili!

Workflow

La produzione di un eseguibile si svolge in due fasi: la prima è la generazione di un file di specifiche contenente le informazioni necessarie (lo specfile). La seconda consiste nel leggere il contenuto dello specfile e produrre l’eseguibile vero e proprio.

pyinstaller_wf

Prima di vedere in dettaglio le due fasi, scriviamo lo script Python che andremo ad impacchettare in un eseguibile. Nella cartella c:\sviluppo, dove risiede PyInstaller, creiamo una nuova cartella, c:\pyfoo, all’interno della quale piazzeremo lo script foo.py contenente il codice seguente:


# -*- coding: utf-8 -*-
def sayHello():
    """Say hello to PyInstaller"""
    print "Hello, PyInstaller!"

if __name__ == "__main__":
    sayHello()
    raw_input("Press return to exit...")

Generazione dello specfile

Come nel caso della generazione del file di configurazione, non dobbiamo preoccuparci troppo dello specfile, visto che sarà un altro script fornito da PyInstaller, per la precisione MakeSpec.py, a fare il grosso del lavoro (per non dire tutto). Makespec.py necessita di sapere qual’è lo script Python con cui si avvia la nostra applicazione: penserà lui, seguendo le varie istruzioni di import, a ricavare quanti e quali moduli costituiscono il nostro progetto. Nell’esempio di questo tutorial lo script è uno solo, ma il comando sarebbe stato lo stesso nel caso avessimo importato qualche modulo:

C:\sviluppo\pyinstaller>..\..\Python26\python.exe Makespec.py  - -onefile ..\pyfoo\foo.py

In pratica eseguiamo lo script MakeSpec.py passandogli l’opzione come parametro lo script da impacchettare e come opzione un flag che indica a PyInstaller di mettere tutti i files necessari (moduli, librerie, icone) all’interno del .exe; come potete vedere, è lo stesso PyInstaller a dirci come procedere:

wrote C:\sviluppo\pyinstaller\foo\foo.spec
now run Build.py to build the executable

Lo specfile è stato generato correttamente, aprendolo con un editor di testi possiamo vedere come esso contenga del codice Python che possiamo anche modificare secondo necessità, prendendo il controllo delle operazioni di costruzione dell’eseguibile. Per ora però accontentiamoci del lavoro svolto da MakeSpec.py, ampiamente sufficiente per i nostri scopi.

Generazione dell’eseguibile

Giunti a questo punto non ci resta che invocare lo script Build.py contenuto nell’installazione di PyInstaller, passandogli come parametro il nostro specfile:

C:\sviluppo\pyinstaller>..\..\Python26\python.exe Build.py foo\foo.spec

Se non ci sono stati errori (la produzione di qualche messaggio di warning non dovrebbe preccuparci data la semplicità dell’esempio) troveremo al percorso:

C:\sviluppo\pyinstaller\foo\dist

il nostro eseguibile foo.exe, pronto per essere trasportato su un’altra macchina Windows, con o senza Python ed eseguito senza problemi.

Provare per credere!

One thought on “PyInstaller Primo Contatto – tutorial per Windows

  1. “C:\sviluppo\pyinstaller>..\..\Python26\python.exe Makespec.py – -onefile ..\pyfoo\foo.py”
    mi dice no module named pyinstaller

    non capisco che cos’è quel python .exe

Comments are closed.