Home Assistant. Обновление Python

18:17

Если вы пользуетесь Home Assistant, то после очередного обновления могли заметить на появившееся уведомление о том, что «Support for the running Python version 3.7.3 is deprecated and will be removed in the first release after December 7, 2020. Please upgrade Python to 3.8.0 or higher».

В стандартных системных репозиториях обычно содержатся стабильные и надежные версии пакетов, а не самые свежие и актуальные. И по состоянию на середину января 2021 года Python в репозиториях Debian и Ubuntu так и не спешат обновлять до версии 3.8.x.

Поэтому единственный вариант убрать назойливое уведомление и избавить себя от возможных проблем с совместимостью грядущих обновлений Home Assistant — это установить новую версию Python вручную, предварительно собрав ее из исходников.

  •  

Исходные данные

В этой статье я буду исходить из того, что:

  • У вас уже установлен Home Assistant
  • Он установлен в виртуальное окружение Python
  • Используется операционнная система на базе Debian или Ubuntu

Если вы пользуетесь Docker-контейнерами или дистрибутивом Hass.io, то обновлять пакеты вручную вам не придется.

Обновление Python

На заметку
Процесс обновления описан на примере актуальной на момент написания статьи версии Python 3.9.1. На странице загрузок Python всегда можно посмотреть номер свежего релиза и заменить ссылки на скачивание и распаковку архива в приведенных ниже командах.

Для начала остановим Home Assistant:

sudo systemctl stop home-assistant@homeassistant.service

Установим нужные для сборки из исходников пакеты:

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 libxslt-dev libxml2-dev libjpeg-dev zlib1g-dev

Скачаем и распакуем архив с Python 3.9.1:

wget https://www.python.org/ftp/python/3.9.1/Python-3.9.1.tgz
tar xzvf Python-3.9.1.tgz
cd Python-3.9.1

Соберем его из исходников и запустим установку:

./configure --enable-optimizations
make -j 4
sudo make install

Процесс сборки занимает около 12 минут на Raspberry Pi 4, поэтому придется запастись терпением.

 

 

 

После завершения установки можно проверить, что Python действительно обновился путем выполнения двух команд:

python3 --version
pip3 --version

И если в консоли появится такие ответы, то процесс обновления прошел успешно:

Обновление Python 3 в Linux для Home AssistantТеперь обновим менеджер пакетов pip:

sudo /srv/homeassistant/bin/python3.9 -m pip install --upgrade pip
sudo python3.9 -m pip install --upgrade pip

В случае если после обновления Python при запуске Home Assistant появится ошибка с доступностью библиотеки libffi.so.7 можно создать симлинк с libffi.so.7 на нее:

sudo ln -s /usr/lib/arm-linux-gnueabihf/libffi.so.6 /usr/lib/arm-linux-gnueabihf/libffi.so.7

Если симлинк не создается, то значит в вашей системе libffi.so.6 находится по другому пути. Найдите корректный путь через поиск по названиям файлов:

find /usr/lib -name "libffi.so*"

Переустановка Home Assistant

Теперь переустановим Home Assistant. Для этого сохраним в файл список используемых им пакетов Python:

cd /home/homeassistant/
sudo  -u homeassistant -H -s
source /srv/homeassistant/bin/activate
pip3 freeze –local > requirements.txt
deactivate
exit

Удалим директорию с установленным Home Assistant и создадим ее заново:

sudo rm -r /srv/homeassistant
sudo mkdir /srv/homeassistant
sudo chown homeassistant:homeassistant /srv/homeassistant

Запустим процесс установки по сохраненному ранее списку пакетов:

sudo -u homeassistant -H -s
cd /srv/homeassistant
python3.9 -m venv .
source /srv/homeassistant/bin/activate
pip3 install wheel
pip3 install -r /home/homeassistant/requirements.txt

И, наконец, перезапустим сервис Home Assistant:

sudo systemctl restart home-assistant@homeassistant

На этом процесс обновления завершен окончательно, и после перезапуска из панели уведомлений должно исчезнуть сообщение о неподдерживаемой версии Python.

 

(c) Dmitry's notes https://dmitrysnotes.ru/home-assistant-obnovlenie-python