Il progetto Python Package Index rappresenta una risorsa molto importante per tutti gli sviluppatori Python, esso infatti contiene un vasto bacino di librerie Python già pronte per essere installate ed usate sulle varie piattaforme supportate. Tuttavia queste librerie sono in gran parte disponibili solo per l'architettura x86, dunque le board ARM come Raspberry Pi sono escluse da questa risorse, ecco perché la community open source ha dato vita a Piwheels.
All'interno del Python Package Index sono presenti più di 150,000 librerie scritte in Python o in C/C++. Per assicurare che esse possano essere sfruttate in tutte le piattaforme più diffuse vengono utilizzate le built distribution chiamate Python wheels. Queste build offrono piena compatibilità, le librerie che invece sono implementante con linguaggi diversi, come C/C++, devono invece essere invece pacchettizzate separatamente per ogni sistema operativo.
Se lo sviluppatore di una determinata libreria ha intenzione di supportare tutti i principali sistemi operativi (sia a 32 che a 64bit) e tutte le varie versioni di Python più gettonate (2.7, 3.4, 3.5 e 3.6), dovrà realizzare e distribuire ben 24 versioni diverse. Alcuni sviluppatori riescono effettivamente ad eseguire un lavoro cosi imponente, ma negli altri casi sarà necessario compilare da codice sorgente con un mancato risparmio di tempo.
Questa è la situazione in cui si trovano spesso gli utenti della Raspberry Pi. Il team di Piwheels si occupa dunque di compilare e pacchettizzare le librerie Python per questa board presenti nel Python Package Index. Tali pacchetti sono compilati nativamente per Raspberry Pi 3 con Raspbian, la distribuzione sviluppata ufficialmente dal team del progetto. I pacchetti sono caricati in un datacenter che già di base offre dei server low-cost realizzati proprio con Raspberry Pi 3.
Il portale di Piwheels da accesso ai wheels in una pip-compatible web server configuration in modo tale che gli utenti del Raspberry Pi possano usarli ed implementarli molto facilmente.
Gran parte del software sviluppato per piwheels gira interamente a server composti da Raspberry Pi 3. L'architettura del progetto è così suddivisa:
- Master: una Raspberry Pi che fa da web server dove vengono caricati i wheel file e distribuiti i task ai vari builder Pis.
- Database server: dove tutte le informazioni sui pacchetti vengono immagazzinate in un database Postegres.
- Builders: le macchine che si occupano di compilare il codice caricato (Pis), dopo la compilazione essi comunicano il risultato del loro lavoro al database.
Attualmente il progetto dispone di circa 20 Raspberry Pis che si occupano appunto di compilare e distribuire i pacchetti delle librerie Python. Un piccolo numero di essi è dedicato alla pacchettizzazione delle nuove versioni delle librerie, tre Raspberry Pi sono infatti dotati di Raspbian Jessie (Python 3.4) mentre altri due montano Raspbian Stretch (Python 3.5).
Ogni mese vengono scaricati dal portale del progetto circa 500,000 pacchetti. Si tratta di un grande successo per il progetto che è attivo da circa 10 mesi. Gran parte delle guide introduttive alla programmazione su Raspberry Pi comprendono esempi con delle librerie Python, dunque è comprensibile che gli utenti abbiamo accolto molto bene l'arrivo Piwheels.
Grazie ai volontari del progetto è possibile evitare le lunghe attese della compilazione per avere tutto a portata di mano tramite il comodo gestore di pacchetti pip. Il codice di Piwheels è disponibile su un repository pubblico di Github, se disponete delle competenze potete quindi contribuire attivamente al progetto.