Instalación de NILMTK y nilmtk-contrib en Windows 11: retos y solución definitiva con WSL y pyenv


En este blog hemos hablado en muchísimas ocasiones del paquete NILMTK, el famoso paquete open software para implementar la desagregacion de la energia .NILMTK es un toolkit de código abierto para Non-Intrusive Load Monitoring (NILM), cuya utilidad principal es desagregar el consumo eléctrico de una vivienda en los diferentes electrodomésticos usando solo la lectura de un medidor general. ¿Qué significa esto?

  • NILM (Non-Intrusive Load Monitoring): Técnica que estima cuánta energía consume cada aparato sin necesidad de instalar sensores individuales en cada uno.
  • NILMTK (Toolkit): Es una biblioteca en Python que ofrece algoritmos, datasets y herramientas para investigar, probar y comparar métodos de desagregación energética.

Utilidad práctica

  • Investigación en Smart Grids: Permite estudiar hábitos de consumo eléctrico sin desplegar muchos medidores.
  • Eficiencia energética: Ayuda a identificar qué aparatos consumen más y cuándo, facilitando estrategias de ahorro.
  • Aplicaciones comerciales: Puede generar facturas detalladas a partir de un único medidor, útil para compañías eléctricas o proyectos de domótica.
  • Desarrollo académico: Es usado en universidades y centros de investigación para probar nuevos algoritmos de machine learning aplicados al consumo energético.

NILMTK convierte una sola lectura de energía en información detallada por aparato, lo que lo hace valioso para investigación, eficiencia y gestión energética. Todo esto esta muy bien ….pero instalar NILMTK y nilmtk-contrib en Windows 11 puede convertirse en una tarea complicada debido a incompatibilidades de versiones de Python y dependencias antiguas usadas por las librerías. Si bien la opción inicial recomendada suele ser crear un entorno conda con Python 3.7, con frecuencia surgen problemas al manejar las versiones correctas de dependencias como numpy y pandas , por eso otro camino puede ser usar WSL ,el cual vamos a explorar en este post, pero antes veamos los problemas a los qeu nos enfrentamos con la instalación clásica con la herramienta Conda/miniconda.

Problemas frecuentes al usar Conda en Windows

Debido a que NILMTK requiere versiones específicas, comúnmente se intenta crear un entorno conda con Python 3.7:

conda create -n nilmtk-env python=3.7
conda activate nilmtk-env
conda install -c nilmtk nilmtk=0.4.3 numpy=1.19.5 -y

No obstante, se presentan errores como LibMambaUnsatisfiableError porque la dependencia hmmlearn no está disponible en el canal nilmtk. Agregar el canal conda-forge y combinar instalaciones con conda y pip es la solución habitual:

conda config --add channels conda-forge
conda config --set channel_priority flexible
conda install hmmlearn numpy=1.19.5 -y
pip install nilmtk==0.4.3 --no-deps

Sin embargo, incluso con estos ajustes, la instalación en Windows puede ser inestable. Además, NILMTK no está oficialmente publicado en PyPI, por lo que la instalación desde código fuente usando pip es habitual, lo que puede generar otras complicaciones relacionadas con versiones de Python y dependencias de construcción como hatchling.

La solución definitiva: usar WSL con pyenv y Python 3.11.5

La forma más estable es instalar NILMTK dentro de WSL (Windows Subsystem for Linux), usando pyenv para gestionar una versión compatible de Python, concretamente la 3.11.5. Esto permite:

  • Evitar conflictos de versiones de dependencias antiguas.
  • Usar la infraestructura Linux más compatible para herramientas científicas.
  • Integrar sin problemas con Visual Studio Code y Jupyter.

Pasos clave para esta instalación en WSL

  1. Prepara WSL con las dependencias básicas para compilar Python
sudo apt update && sudo apt upgrade -y
sudo apt install -y build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev \
libsqlite3-dev wget curl llvm libncurses-dev xz-utils tk-dev libffi-dev liblzma-dev python3-openssl git
  1. Instala pyenv y configúralo en tu shell
curl https://pyenv.run | bash

Incluye al final de ~/.bashrc:

export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init --path)"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

Carga la configuración actual:

source ~/.bashrc
  1. Instala Python 3.11.5 y crea un entorno virtual específico para NILMTK
pyenv install 3.11.5
pyenv virtualenv 3.11.5 nilmtk-env
pyenv activate nilmtk-env
  1. Actualiza pip y instala las dependencias fundamentales
pip install --upgrade pip setuptools wheel
pip install numpy pandas hmmlearn h5py matplotlib networkx nose tables tqdm
pip install git+https://github.com/nilmtk/nilm_metadata.git
  1. Clona el código fuente de NILMTK y nilmtk-contrib e instálalos
git clone https://github.com/nilmtk/nilmtk.git
git clone https://github.com/nilmtk/nilmtk-contrib.git

cd nilmtk
pip install -e . --no-deps
cd ..

cd nilmtk-contrib
pip install -r requirements.txt --no-deps
pip install -e . --no-deps
cd ..
  1. Configura Jupyter para usar el nuevo entorno
pip install jupyter ipykernel
python -m ipykernel install --user --name=nilmtk-env --display-name "Python (nilmtk-env)"
  1. Integra con Visual Studio Code

Abre VS Code desde la terminal WSL con el entorno activado:

pyenv activate nilmtk-env
code .

Selecciona el intérprete Python ubicado en:

text/home/carlo/.pyenv/versions/3.11.5/envs/nilmtk-env/bin/python

Y en los notebooks selecciona el kernel "Python (nilmtk-env)".

Conclusión

Aunque instalar NILMTK y nilmtk-contrib en Windows 11 presenta numerosos retos por incompatibilidades de versiones y dependencias, usar WSL combinado con pyenv y Python 3.11.5 proporciona un entorno estable, funcional y que integra bien con VS Code y Jupyter.

Este es el método recomendado para investigadores y desarrolladores que buscan máxima compatibilidad y facilidad para trabajar con NILMTK en Windows.

Deja un comentario

Este sitio utiliza Akismet para reducir el spam. Conoce cómo se procesan los datos de tus comentarios.