Instalando otra versión python con usuario no root


Escenario: Actualmente uso Home Assistant con Debian 12, tanto en una Raspberry Pi 4 como en un servidor x86. La versión de Python del sistema sólo me deja llegar hasta Home Assistant 2024.3.3.

Objetivo: Usar el la versión python 3.12.x para poder usar las últimas versiones de Home Assistant y, no instalar python en el sistema como root de manera global.

La configuración uso es la siguiente:

  • Debian 12
  • Un usuario hass que es el que ejecuta Home Assistant
  • Home Assistant instalado en un entorno virtual

En la mayoría de los sitios de Internet compilan python y después lo instalan como mediante sudo make altinstall. Aunque altinstall lo instala en /usr/local, esto contamina el sistema operativo y en caso de limpieza hay que borrarlo todo manualmente. Además, no es buena práctica si se tienen otros servicios en el mismo sistema ya aparecen varios ejecutables python3.

Compilación e instalación

Es procedimiento es parecido a lo que aparece en Internet los pasos son:

  1. Descargar la versión requerida de Python
  2. Configurar la compilación cambiando el directorio destino de la instalación
  3. Compilar Python e Instalar python (sin sudo)
  4. Crear un entorno virtual con la nueva versión de Python
  5. Instalar en el entorno virtual Home Assistant con pip.

Puede que cuando leas esto exista otra versión, en Python Downloads se puede consultar la lista. Procedo con la versión 3.12.4 y con un usuario no root

wget https://www.python.org/ftp/python/3.12.4/Python-3.12.4.tar.xz
tar -xf Python-3.12.4.tar.xz

Ya tengo el código fuente de Python en el directorio Python-3.12.4. El siguiente paso es configurar la compilación y aquí es donde añado una opción extra --prefix para instalarlo en el propio home del usuario que ejecuta Home Assistant.

cd Python-3.12.4
./configure --prefix=$HOME/python3.12.4-bin --enable-optimizations
make -j4
make install

El último comando hace la instalación en el directorio indicado en --prefix. En ese directorio se encuentran los binarios de Python y pip. Ejecutando explícitamente ese python se puede crear un entorno virtual asociado a la nueva versión.

cd $HOME
$HOME/python3.12.3-bin/bin/python3.12 -m venv hass-venv
cd hass-venv
source bin/activate
pip install homeassistant

# Ejecuto Home Assistant desde la línea de comando
hass

Por ahora me funciona la última versión de Home Assistant correctamente pero como uso una base de datos MySQL tengo que instalar el conector mediante pip install mysqlclient

#Home Assistant #Debian