Ancora Python su Android

In un mio articolo del giugno 2015, intitolato Python su Android e archiviato in Programmazione su questo blog, ho parlato di come fosse possibile lavorare con Python su Android grazie all’installazione di un layer per l’esecuzione di script di vario tipo, tra cui gli script Python.
Tuttora è possibile fare questo installando le due app indicate in quell’articolo: il layer sl4a, il cui funzionamento è illustrato nel file PDF allegato all’articolo stesso, e il pacchetto Python per Android.
Con quegli strumenti abbiamo la possibilità di creare e utilizzare script Python di varia utilità, avendo tuttavia a disposizione la sola versione Python di base, semplicemente arricchita della libreria per le funzioni matematiche ricorrenti. Non abbiamo invece la possibilità di accedere alla ricchezza delle estensioni descritte nel mio articolo Python per tutti del febbraio 2017, alle funzioni grafiche descritte nei miei articoli Grafica con Python del maggio 2018 e Ancora grafica con Python dell’ottobre 2018 ed alle sofisticazioni descritte nel mio articolo Software libero per data scientists dello scorso mese di aprile 2019: tutti articoli archiviati in Programmazione su questo blog.
Nel frattempo la IIEC di Novosibirsk ci ha regalato una cosa interessante: una app che ci consente di avere Python sul nostro dispositivo equipaggiato Android come – o quasi – se lo stessimo utilizzando su un normale computer equipaggiato Linux, senza più limitazioni, salvo quelle di memoria e di capacità elaborativa del dispositivo stesso.
Il primo rilascio di questa app, che si chiama Pydroid, risale alla fine del 2017 e il più recente, versione 3.01, è del 4 aprile 2019.
Visto che, pur con qualche residuale eccezione, pare che la app abbia superato l’assestamento dei primi rilasci, ne presento le funzionalità nell’allegato manualetto in formato PDF.
Come sempre il documento è liberamente scaricabile, stampabile e distribuibile.

pydroid

Vari tipi di programmi

I primi tre programmi che ho proposto sono ognuno di un tipo diverso.

Il programma calendario è un programma compilato, cioè è codificato, come si suol dire, in linguaggio macchina in modo da poter essere letto ed eseguito direttamente dalla CPU (Central Processing Unit) del computer attraverso il sistema operativo di cui il computer è dotato.
Questi programmi si scrivono in un linguaggio di programmazione che usa parole del linguaggio umano seguendo una determinata sintassi. Una volta scritti si traducono in linguaggio macchina attraverso programmi compilatori e si producono i così detti eseguibili (file che nel mondo Windows hanno l’estensione .exe).
I più famosi linguaggi che si prestano per produrre questo tipo di programmi sono, in ordine di anzianità, Pascal, C, C++, ADA.
Una volta che abbiamo l’eseguibile non ci interessa avere il programma compilatore e non ci interessa nemmeno sapere con quale linguaggio è stato prodotto l’eseguibile. A meno che vogliamo modificare l’eseguibile stesso: ma allora dobbiamo avere anche il codice sorgente, cioè quello scritto prima di essere codificato in linguaggio macchina.
La stragrande maggioranza del software commerciale è costituita da eseguibili di questo tipo e le aziende che producono questo software ben si guardano dal distribuire il codice sorgente, che mantengono protetto da brevetti. Nel mondo del software libero, invece, è normale distribuire anche il sorgente affinché ognuno possa contribuire al miglioramento del software stesso.
Il vantaggio di questo tipo di software è quello della velocità di esecuzione: vantaggio che, con la potenza dei processori che abbiamo oggi, è sempre meno percepibile in quanto vengono ormai eseguiti velocemente anche programmi di altro tipo.
Lo svantaggio sta nel fatto che un programma destinato ad essere eseguito su un certo sistema operativo deve essere compilato su e per quel sistema operativo. Un programma compilato per Windows non gira su Linux e su OS X e viceversa. Cioè, come si dice, gli eseguibili compilati non hanno portabilità.

Il programma calcoliGeometrici, prodotto utilizzando il linguaggio di programmazione Java, è anch’esso un programma compilato: la codifica, tuttavia, non lo traduce in linguaggio macchina ma in qualche cosa di intermedio, chiamato bytecode.
Questo bytecode non è direttamente proponibile per l’esecuzione dal sistema operativo del computer alla CPU ma viene passato alla CPU da una piattaforma intermedia installata sul sistema operativo, la così detta macchina virtuale Java, JRE (Java Runtime Environment).
Se il computer non ne fosse dotato, basta scrivere la parola java in una barra di ricerca sul web e verremo immediatamente indirizzati al sito da cui possiamo scaricare la versione adatta al nostro sistema operativo.
Molto software commerciale è prodotto con Java con distribuzione dell’eseguibile codificato in bytecode, che non è umanamente leggibile e si presta alla tutela dei segreti di fabbricazione. Nel mondo del software libero viene ovviamente diffuso anche il sorgente scritto nel linguaggio Java, derivato dal linguaggio C.
Il vantaggio di questo tipo di software sta nel fatto che lo stesso eseguibile gira su tutti i sistemi operativi che siano dotati della macchina virtuale Java, cioè è dotato della massima portabilità.
Lo svantaggio sta nella relativa lentezza di esecuzione dovuta al doppio passaggio tra sistema operativo e macchina virtuale e tra macchina virtuale e CPU; lentezza che praticamente non si avverte con i più moderni processori ma che si può avvertire su computer anzianotti.

Il programma MasterMind non è un programma compilato ma è, praticamente, un sorgente scritto nel linguaggio Python: in termine tecnico si chiama uno script.
Gli script, per essere eseguiti, hanno bisogno di essere tradotti in linguaggio macchina attraverso un interprete che li legge, li traduce e li trasmette alla CPU.
Sul computer dove vogliamo utilizzarli deve essere installato questo interprete.
I principali linguaggi di scripting, in ordine di anzianità, sono Perl, Python e Ruby.
Come per Java il vantaggio è la portabilità, a condizione che sul computer sia installato l’interprete.
Lo svantaggio è la relativa lentezza di esecuzione.

Esecuzione di script Python

Un programma Python, meglio sarebbe dire uno script Python, non è compilato, cioè non è direttamente eseguibile dalla CPU del computer.
Esso, infatti, è costituito da un elenco di istruzioni, composto secondo le regole sintattiche del linguaggio di programmazione Python, scritte in caratteri alfanumerici leggibili dall’uomo: da qui il nome più adatto di “script”.
Per essere eseguito ha bisogno di essere interpretato nel momento stesso dell’esecuzione.
Vediamo ciò che può avvenire nei due sistemi operativi Linux e Windows.

Sistema Linux

Il modo basico di eseguire lo script è quello di posizionarci nella directory dove lo abbiamo archiviato e richiamarlo con l’interprete scrivendo a terminale, nel caso l’interprete sia Python3 e lo script sia quello del gioco Master Mind scaricabile dal relativo articolo:
python3 MasterMind.py
Se questa istruzione la inseriamo in un launcher, indicando al posto di MasterMind.py anche tutto il percorso per raggiungerlo, avremo un’icona da inserire nei nostri menu, cliccando sulla quale lanceremo il programma.
Se vogliamo poter lanciare il programma senza richiamare l’interprete dobbiamo inserire nello script, come prima riga, dopo i simboli #! il percorso per raggiungere l’interprete con il nome dell’interprete stesso. In questo modo, con alcuni gestori di file come Nemo, potremo anche lanciare il programma con doppio click sull’icona del file.
Ovviamente lo script va reso preventivamente eseguibile con chmod 555.
Per i programmi che utilizzano moduli, come avviene per il nostro Master Mind con il modulo tkinter, occorre che, insieme all’interprete, sia presente sul computer anche il modulo stesso.
Nei sistemi Linux, che hanno generalmente preinstallato Python insieme al sistema, può accadere che la preinstallazione non comprenda il modulo tkinter. Si rimedia subito cercando tkinter nel gestore di programmi e installandolo. Indirettamente si può installare tkinter installando la Idle (Integrated DeveLopment Environment) del nostro Python, peraltro utilissima per produrre gli script.

Sistema Windows

Tutti gli installatori di Python per Windows installano anche tkinter, e questo è bene.
Il male viene dal fatto che l’installatore inserisce l’interprete in una directory intitolata alla versione di Python che installa, all’interno della quale, però, il nome del programma interprete è sempre python.exe, indipendentemente dalla versione. Mentre, cioè, nel sistema Linux abbiamo un eseguibile python2 per la versione 2 e un eseguibile python3 per la versione 3, in Windows abbiamo un eseguibile python.exe archiviato nella directory Python20 per python 2 e un eseguibile, ancora python.exe, archiviato nella directory Python30 per python 3.
L’installatore non inserisce il percorso a python.exe nel path di sistema: forse fa questo per evitare casini. Infatti se installassimo due versioni di Python su Windows, la 2 e la 3, e inserissimo entrambe nel path di sistema combineremmo un guaio, in quanto il richiamo dell’eseguibile python.exe per interpretare uno script Python avverrebbe a caso, senza tener conto della versione di Python con cui è stato generato lo script.
Nè possiamo sperare che ci aiuti la prima riga dello script, dove, dopo i simboli #! inseriamo il percorso per raggiungere l’interprete giusto: questa riga, infatti, è capita solo dal sistema operativo Linux (che, come tutti ormai sanno, è il miglior sistema operativo esistente).
In conclusione, se abbiamo il nostro giochino Master Mind su Windows e vogliamo inserirlo nel menu lo facciamo indicando ove dovuto i percorsi all’interprete e allo script da eseguire.
Se vogliamo che il nostro giochino parta con doppio click sulla sua icona:
. o, visto che lo script è in Python 3, inseriamo nel path di sistema il percorso c:\python30 e tutte le volte che richiamiamo python ci esce la versione 3;
. oppure creiamo un file batch con l’istruzione
c:\python30\python.exe “<percorso allo script da eseguire>”,
lo archiviamo con l’estensione .bat e lanciamo il nostro giochino con doppio click sull’icona del file batch.

Da Python 2 a Python 3

Se qualcuno ha scaricato l’applicazione Python for Android che ho proposto nel mio precedente articolo “Python su Android” si sarà accorto che si tratta della versione 3 di Python. Questa versione è stata rilasciata fin dal 2008 e costituisce ormai il presente e il futuro del linguaggio Python. Ma il mondo è ancora pieno di versioni 2, in particolare dell’ultima rilasciata 2.7.9, che resiste alla messa in quiescenza in quanto i programmi scritti con la sintassi della versione 2 non sono compatibili con la versione 3 e questi programmi:
. o si continuano ad utilizzare con l’interprete di una delle versioni 2,
. o si buttano insieme al vecchio interprete di una delle versioni 2,
. o si adattano alla versione 3 e si butta il vecchio interprete di una delle versioni 2.
La cosa più saggia da fare è sicuramente l’ultima, in quanto le differenze tra le versioni 2 e 3 non sono poi così tante.
Per i volonterosi che vogliano provvedere ad aggiornare i propri programmi Python 2 a Python 3 le elenco nel file PDF allegato, scaricabile e stampabile.
Chi già conosce Python 2 e non conosce ancora Python 3 ha così anche la chiave per programmare, da qui in poi, in Python 3.

da_python2_a_python3

Python su Android

Su un tablet o su uno smartphone equipaggiati con Android è possibile lavorare con il linguaggio di programmazione Python; lavorare nel senso di avere a disposizione la shell di Python e di poter eseguire script Python archiviati sul dispositivo.
Mi si chiederà: per farci che cosa?
Nel mio caso, oltre che per eseguire programmi di calcolo di varia natura da me prodotti (calcoli finanziari, calcoli statistici, calendario perpetuo, ecc.), anche per poter accedere con facilità a database Sqlite (ricordo che Sqlite è integrato nel sistema Android) dove ho catalogato tutte le mie raccolte musicali e di biblioteca, con il vantaggio, tra i tanti, che, potendo controllare istantaneamente sullo smartphone le opere di un certo autore che già posseggo non corro il rischio di acquistare doppioni quando sono in giro per negozi.
Al di là di tutto ciò sta comunque la soddisfazione di poter creare qualche cosa che funzioni persino su un telefonino, divertendosi con quello splendido linguaggio di programmazione che è Python.

Per fare queste cose dobbiamo innanzi tutto procurarci l’applicazione sl4a (scripting layer for android) che è la piattaforma sulla quale possiamo far girare i nostri script. Si dice in giro che questa applicazione sia diventata incompatibile con Android a partire dalla versione 5.0 (Lollipop): non mi pare, visto che su un mio emulatore con Android 5.0.1 (API 21) funziona benissimo. L’ultima versione dell’applicazione, la sl4a_r6 si trova qui.
Dobbiamo poi procurarci l’applicazione Python for Android, che ci consente di installare l’interprete Python. L’ultima versione, Python3ForAndroid_r6 si trova qui.
Entriamo così in possesso dei file sl4a_r6.apk e Python3ForAndroid_r6.apk che dobbiamo installare, nell’ordine, sul nostro dispositivo. Per l’installazione di sl4a è necessario che il dispositivo sia corredato di una SDCard sulla quale verrà automaticamente creata una directory per ospitare gli script.
Con collegamento internet attivo lanciamo l’applicazione Python for Android e, dal menu che compare, scegliamo Installa: dopo qualche minuto di scaricamento, scompattamento e installazione avremo il nostro Python sul dispositivo e lanciando l’applicazione sl4a troveremo elencati gli script Python che si sono installati per dimostrazione ed ai quali potremo aggiungere tutti quelli che produrremo noi.
L’allegato file PDF, scaricabile e stampabile, costituisce un utile prontuario sul funzionamento dell’applicazione sl4a.

sl4a