Diciamo la verità: finora ho utilizzato Python solo per pochi e semplici script, per automatizzare operazioni ripetitive o per analisi di dati.
Questi script li ho sempre eseguiti sulle mie postazioni, avendo cura di installare l'interprete, ed ho sempre utilizzato pacchetti standard e quindi non ho mai avuto bisogno di pip.
Ma come bisogna comportarsi se si utilizza un modulo aggiuntivo? Come poter eseguire i nostri script anche su altre postazioni? In questo articolo vediamo come fare: il nostro obiettivo è ottenere un eseguibile Windows che non necessiti l'installazione di python.

python 400

Prima di iniziare, per chi lavora sotto Windows consiglio questo articolo https://gist.github.com/ricpol/2ca0ae46f02bfddf08036fa85519aa97 fatto davvero bene.
Se si vuole installare un modulo aggiuntivo è buona norma creare un "virtual environment", questo per non compromettere l'integrità dell'installazione base.

Supponiamo di dover creare uno script che lavora su immagini su disco, ad esempio per creare delle thumbnails; nel nostro esempio ci limiteremo ad eseguire un filtro Blur su un'immagine prestabilita e per fare questo avremo bisogno del modulo pillow.

Creazione del Virtual Environment
Da linea di comando basta dare

python -m venv NOMEVENV

Nella mia installazione non ho inserito la directory di python nel PATH e pertanto ho digitato

"c:\Program Files\Python35\python.exe" -m venv prova

per creare il virtual environmente di nome "prova": a questo punto si crea una sottocartella prova con tutto il necessario.

Entrare ed uscire nel Virtual Environment
Sempre da linea di comando, per entrare basta dare:

cd prova
Scripts\activate.bat

e al termine per uscire

Scripts\deactivate.bat

anche se a dire la verità tanto vale chiudere la finestra della linea di comando. Quando siamo all'interno di un virtual environment il prompt dei comandi riporta fra parentesi il nome dello stesso fra parentesi, in questo caso:

(prova) c:\dati\seb\prova

Installazione di Pillow
Con il virtual environment attivo, installiamo pillow:

(prova) c:\dati\seb\prova>pip install pillow

Quando ho provato mi ha dato questo errore:

You are using pip version 7.1.2, however version 9.0.1 is available.
You should consider upgrading via the 'python -m pip install --upgrade pip' command.

ma basta seguire le istruzioni e dare

(prova) c:\dati\seb\prova>python -m pip install --upgrade pip

per risolvere tutto!

Rilanciando l'installazione di pillow la procedura va a buon fine.

Prima prova con pillow
Ecco qui una prima prova con pillow, tanto per usare questo modulo: eseguiamo il blur di un'immagine prestabilita ("prova.jpg") e la salviamo come blurred.png.

from PIL import Image, ImageFilter 

try:
    original = Image.open("prova.jpg")
except:
    print( "Unable to load image")

print("The size of the Image is: ")
print(original.format, original.size, original.mode)    
blurred = original.filter(ImageFilter.BLUR)
blurred.show()

blurred.save("blurred.png");

Si tratta di un semplice copia&incolla di diversi esempi trovati con google: salvatelo ad esempio con nome blur.py e quindi dal prompt date:

(prova) c:\dati\seb\prova>python blur.py

Naturalmente inserite un'immagine chiamandola prova.jpg.

Creiamo una distribuzione
Ora il problema è: come possiamo eseguire questo script su un'altra postazione o, più banalmente, come potremmo eseguire lo script con un doppio click da risorse del computer? Lo script, infatti, è eseguibile al momento solo dall'interno del virtual environment...

Per questo ci viene in aiuto pyinstaller (http://www.pyinstaller.org/); diamo

(prova) c:\dati\seb\prova>pip install pyinstaller
(prova) c:\dati\seb\prova>pyinstaller blur.py

che installa pyinstaller e genera un sottocartella dist contenente l'eseguibile. Qui il contenuto della mia cartella:

blurexe
Nelle mie prove ho visto che questo eseguibile funziona sia sulla stessa postazione, fuori dal virtual environment, che su un'altra postazione senza python!

Esattamente quello che volevo! Non mi rimane che esplorare le funzioni di pillow!