Aggiornare a Python 3.7.3 per compatibilità con Home Assistant
di Luigi Duchi
11 Giugno 2019
L'angolo dei lettori
Benvenuti nella rubrica "l'angolo dei lettori". Questo spazio è una sezione del blog che permette a chiunque di scrivere un articolo o realizzare un video, effettuare prove e test che riguardano il mondo della tecnologia e proporne la pubblicazione su queste pagine.
Oggi Tommaso Sala(Lo potrete trovare su telegram con questo account @teejay87 oppure su github a questo indirizzo https://github.com/teejay-87 ) ci spiegherà come aggiornare la versione di Python sul nostro Raspberry, operazione fondamentale per permettere ad Home Assistant di continuare a funzionare.
E’ stata di recente rilasciata l’ultima versione di HomeAssistant, la 0.94.
Chi ha già aggiornato su Raspberry Pi avrà notato una notifica dove si dice che da questa versione il Python 3.5 è considerato deprecato. Per i programmatori questa parola è piuttosto chiara, ma per i comuni mortali in breve significa che la versione di Python indicata è ora considerata obsoleta e che il supporto a tale versione verrà presto rimosso, nello specifico si legge dalla prima release dopo il primo di agosto 2019.
Purtroppo per gli utilizzatori di Raspberry Pi, il sistema operativo più utilizzato, ovvero Raspbian, è basato su Debian 8 e attualmente non vengono forniti paccheti Python precompilati superiori alla 3.5.
Vediamo allora come aggiornare manualmente la versione di Python sul vostro Raspberry Pi, per portarla all’ultima disponibile, ovvero la 3.7.3.
Questa guida presuppone che HomeAssistant sia stato installato in modalità virtual environment, seguendo la procedura ufficiale: https://www.home-assistant.io/docs/installation/raspberry-pi/.
Ciò significa che si presuppone l’esistenza di un utente homeassistant sul Raspberry Pi.
Se non è il vostro caso, alcune istruzioni dovranno essere aggiustate di conseguenza.
Questa guida è piuttosto semplice ma la compilazione di un progetto grosso come Python su una macchina poco potente, quale il Raspberry Pi, potrebbe richiedere qualche ora, mettete quindi in conto questa tempistica. Nel corso della guida verrà indicato quale passaggio richiede il tempo più lungo in modo che possiate tranquillamente assentarvi nel mentre.
Iniziamo:
- Il primo passaggio è stoppare HomeAssistant, il modo più semplice è aprire l’interfaccia grafica, mostrare il menu laterale, premere Impostazioni, quindi Generali, scorrere in fondo e premere il pulsante Stop.
- Ora apriamo un terminale sul Raspberry Pi
- Installiamo tutto il necessario per compilare Python da codice sorgente, chi ha già compilato qualcosa potrebbe avere questi pacchetti già installati: niente paura, apt-get installa solo i pacchetti mancanti:
sudo apt-get install build-essential tk-dev libncurses5-dev libncursesw5-dev libreadline6-dev libdb5.3-dev libgdbm-dev libsqlite3-dev libssl-dev libbz2-dev libexpat1-dev liblzma-dev zlib1g-dev -y
- Creiamo una directory dove lavorare, per comodità sul desktop, e ci entriamo:
cd Desktop
mkdir python373
cd python373
- Scarichiamo quindi i sorgenti più recenti direttamente dal sito ufficiale, quindi estraiamo l’archivio in una cartella e ci entriamo:
wget https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tgz
tar xzvf Python-3.7.3.tgz
cd Python-3.7.3
- A questo punto dobbiamo compilare i sorgenti di Python, per fare ciò lanciamo prima il comando configure, con uno speciale argomento per dirgli che vogliamo una versione di release, ovvero non ci serve per sviluppare. Questo passaggio impiega qualche minuto.
./configure --enable-optimizations
- Ora viene la compilazione vera e propria, questo passaggio impiega letteralmente ore sul risicato hardware del Raspberry Pi, quindi una volta lanciato il comando potete tranquillamente andare a fare dell’altro, magari dando un’occhiata ogni tanto per vedere che tutto proceda correttamente. Utilizziamo l’argomento -j3 per dire al compilatore di utilizzare 3 core, anziché uno, in modo da accelerare un pochino. Qualcuno si chiederà perché non -j4 dato che il Raspberry Pi ha 4 processori: la risposta è che il mio si è letteralmente riavviato con quell’opzione, probabilmente un surriscaldamento della CPU!
make -j3
Nelle righe finali dell’output di questo comando, dopo 2-3 ore, dovreste leggere qualcosa tipo “Python has been built successfully”
- Ora, per installare quanto compilato finora, basterà dare questo comando, che impiegherà qualche minuto:
sudo make install
- Ora digitando python3 --version dovreste leggere Python 3.7.3.
Complimenti, avete appena installato l’ultima release di Python sul vostro Raspberry Pi!
- Ora dobbiamo ricreare il virtual environment per HomeAssistant, ma prima disabilitiamo il servizio e procediamo a un riavvio del Raspberry Pi. Per disabilitare il servizio occorre prima conoscere il nome esatto con il quale è stato installato, per trovarlo diamo questo comando:
sudo systemctl --all | grep hass
oppure, se il precedente non restituisce nulla:
sudo systemctl --all | grep home
dovreste vedere qualcosa del genere:
In questo caso hass-daemon.service è il nome che ci interessa, nel vostro caso potrebbe essere leggermente diverso in base a come lo avete installato la prima volta. Diamo quindi:
sudo systemctl disable hass-daemon.service (oppure il nome del vostro servizio)
- Riavviamo il Raspberry Pi, volendo anche direttamente da console con sudo reboot
- Dopo il riavvio procediamo a un backup del virtual environment esistente, quindi creiamo la directory per il nuovo virtual environment e ne settiamo il proprietario:
cd /srv
sudo mv homeassistant homeassistant.old
sudo mkdir homeassistant
sudo chown homeassistant:homeassistant homeassistant
cd homeassistant
- Aggiorniamo pip (potrebbe non essere necessario, ma anche in questo caso male non fa):
pip install --upgrade pip
- Facciamo login come utente homeassistant:
sudo -u homeassistant -H -s
- Creaiamo quindi il nuovo virtual environment:
python3 -m venv . (non scordate il punto)
source bin/activate
- A questo punto il prompt dei comandi cambierà in questo modo:
(homeassistant) homeassistant@raspberrypi:/srv/homeassistant
Questo significa che abbiamo attivato il virtual environment.
- Installiamo wheel e l’ultima versione di HomeAssistant:
python3 -m pip install wheel
pip3 install homeassistant
- A questo punto possiamo lanciare HomeAssistant con il comando hass
Si noti che, come ogni primo avvio, il server ci metterà molto a diventare raggiungibile tramite la consueta interfaccia web, di solito 5 minuti circa.
- Quando il server sarà partito, controlliamo dall’interfaccia, sotto Strumenti per sviluppatori, pulsante info, che la versione di HomeAssistant sia la più recente e che, più sotto, si legga python_version 3.7.3
- Torniamo sul terminale e stoppiamo HomeAssistant con CTRL-C
Quindi riabilitiamo il servizio e riavviamo il Raspberry Pi:
sudo systemctl enable hass-daemon.service (oppure il nome del vostro servizio)
sudo reboot
A questo punto, una volta terminato il riavvio, Home Assistant dovrebbe avviarsi come di consueto.
Ringraziamo ancora Tommaso Sala per questa splendida guida e vi inviativamo a proporre, numerosi, nuovi contenuti!
Produrre e aggiornare contenuti su vincenzocaputo.com richiede molto tempo e lavoro. Se il contenuto che hai appena letto è di tuo gradimento e vuoi supportarmi, clicca uno dei link qui sotto per fare una donazione.