Если вы пользуетесь 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
Для начала остановим 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
И если в консоли появится такие ответы, то процесс обновления прошел успешно:
Теперь обновим менеджер пакетов 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.6 на нее:
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.
Эта переустановка не сбросит настроенные автоматизации и прочие настройки, в том числе панели отображения?
Нет, настройки хранятся в /home/homeassistant/.homeassistant, а тут затрагивается только /srv/homeassistant.
Но резервную копию все равно сделать стоит.
Не мог поменять версию до тех пор, пока не сделал обновление по этому туториалу: https://community.home-assistant.io/t/python-3-9-install-on-raspberry-pi-os/241558/1
Видимо часть
sudo ln -s /usr/local/bin/python3.9 /usr/bin/python3.9
echo «alias python=/usr/local/bin/python3.9» >> ~/.bashrc
echo «alias python3=/usr/local/bin/python3.9» >> ~/.bashrc
source ~/.bashrc
cd ..
. ~/.bashrc
важна для изменения системных параметров версии.
И в вашем туториале по обновлению hass не сработала строка:
sudo /srv/homeassistant/bin/python3.9 -m pip install —upgrade pip
пока не поменял ее на:
sudo /srv/homeassistant/bin/python3 -m pip install —upgrade pip
В дальнейшем при использовании
pip3 freeze –local > requirements.txt
получаю сообщение:
Usage:
pip3 freeze [options]
no such option: -o
и на месте requirements.txt получаю пустой текстовый файл, что соответственно при попытке установить hass заново с помощью этого списка пакетов не приводит ни к чему.
Устанавливал заново по предыдущему вашему туториалу. Вроде бы всё заработало со старыми настройками. Версия hass 2021.2.3
N
Все сделал по Вашим рекомендациям
В конце просит ввести пароль .Перепробовал все -не подходят
Какой пароль нужно вводить
«В конце» — это при выполнении команды «sudo systemctl restart home-assistant@homeassistant»?
Нужно ввести пароль от суперпользователя. Возможно он не задан у вас в системе. В таком случае задайте его, выполнив команду «sudo passwd».
Проверил инструкцию на свежеустановленной Raspberry Pi OS (Raspbian) — все по-прежнему актуально. Разве что сам Python обновился с 3.9.1 до 3.9.2.
Полезная для многих статья. Спасибо!
Делаю новую установку на USB SSD. Нет смысла обновлять HA, потому сначала по этому руководству обновил Python до 3.9.1, а потом запускаю установку по вашей же инструкции:
https://dmitrysnotes.ru/raspberry-pi-ustanovka-home-assistant
В процессе установки HA происходит даунгрейд pip до 20.2.4
А если я опять обновляю pip:
/srv/homeassistant/bin/python3 -m pip install —upgrade pip
то получаю сообщение о ошибке:
ERROR: After October 2020 you may experience errors when installing or updating packages. This is because pip will change the way that it resolves dependency conflicts.
We recommend you use —use-feature=2020-resolver to test your packages with the new resolver before it becomes the default.
homeassistant 2021.10.6 requires pip=8.0.3, but you’ll have pip 21.3 which is incompatible.
Как быть?
Рано или поздно требования HA к версии pip поменяются, ну а пока надо оставить все как есть и пользоваться устаревшей версией pip.
Ошибок при установке обновлений на HA все равно не будет даже если обновить pip, он просто каждый раз будет даунгрейдиться до нужной версии.
Я не даунгредил — слегка беспокоило.
Спасибо за разъяснение — буду дальше спать спокойно :)