Primeros pasos para usar JupyterLab

JupyterLab es una aplicación web que ofrece todo un entorno de trabajo interactivo ideal para trabajar en el ámbito científico. Su utilidad más impactante es la posibilidad de crear Jupyter Notebooks, que combinan diversos elementos como código interactivo, textos, ecuaciones, imágenes y otras fuentes de datos que se pueden manejar en proyectos científicos de todo tipo.

JupyterLab es extremadamente potente y flexible, ya que permite usar una increíble cantidad de fuentes desde texto, imágenes, hojas de cálculo, HTML, PDF, LaTeX y mucho más. Paralelamente permite trabajar con código escrito en cantidad de lenguajes populares como Python, R o Scala, editando y ejecutando el código sin salirnos de la propia aplicación. Además es capaz de usar diversos tipos de consolas de comandos y almacenar scripts para su ejecución.

Con todo, es una herramienta excelente para integrarla en diversos flujos de trabajo de data-scicence, ya que es capaz de ajustarse a las necesidades más diversas de los profesionales. Además integra toda una serie de herramientas modernas que permiten incrementar la colaboración entre los profesionales, publicar y revisar código entre personas de todo el mundo, en flujos como los que nos proporcionan GitHub o GitLab.

En este artículo vamos a abordar la instalación de la herramienta JupyterLab y los primeros pasos para trabajar con ella.

Instalación de JupyterLab

JupyterLab se puede ejecutar sobre distintos sistemas operativos, aunque lo más habitual es que se despliegue en servidores Linux. Aunque satisfacer todos los requisitos para la instalación puede conllevar cierta dificultad, afortunadamente para los clientes de Arsys se simplifica mucho la operativa, ya que está disponible como aplicación para su instalación en cualquier nuevo servidor cloud de Arsys. Al crear un nuevo servidor cloud en Cloudbuilder Next, en la sección «Imágenes > Aplicaciones» podemos buscar por «jupyter», para encontrar el correspondiente icono para la instalación de JupyterLab.

En pocos minutos nuestro servidor web estará perfectamente desplegado y tendremos la aplicación lista para comenzar a usarla.

Abrir la aplicación web

Una vez desplegado el servidor con JupyterLab instalado, podremos acceder a la aplicación web entrando con un navegador en la IP que se haya asignado al nuevo servidor cloud. Solicitará entonces la clave de acceso, que es la misma clave de root creada para el servidor. Posteriormente nos encontraremos con la interfaz de la aplicación, que tiene un aspecto como el que podemos ver en la siguiente imagen.

Crear un nuevo Notebook

Desde el Launcher, en la parte principal de la pantalla, podemos crear fácilmente un nuevo Notebook, pulsando el botón «Python 3» que hay en la sección «Notebook». Un notebook Jupyter se distribuye a lo largo de diversas celdas, donde podemos generar el contenido con toda la gama de elementos soportados por Jupyter.

Modos de trabajo en notebooks

Para familiarizarnos en el sistema de creación de notebooks tenemos que entender los dos modos de trabajo que disponemos.

Modo comando: Nos permite crear celdas del notebook, copiar y pegar, insertar arriba, abajo, etc. Podemos activar las diversas opciones con el menú contextual que se abre al hacer clic derecho sobre el rectángulo azul de la celda activa. Dentro del modo comando, disponemos de diversos shortcuts básicos, entre otros:

  • Cursores arriba y abajo, para cambiar la celda activa
  • «A» para insertar antes
  • «B» para insertar después
  • «X» para cortar
  • «C» para copiar
  • «V» para pegar

Modo edición: Accedemos a este modo haciendo doble clic sobre el rectángulo de contenido de una celda. Como hemos abierto un entorno de trabajo con Python, el contenido predeterminado que podremos escribir en las celdas es código Python. Sin embargo podemos cambiar el contenido a insertar con un desplegable en la parte de la barra de herramientas del notebook.

Una vez que tengamos el contenido preparado, podemos pulsar el botón de «play» para ejecutarlo. Veremos la salida justo en la parte de abajo de la celda de código. En el caso de un bloque markdown, lo que aparecerá será el renderizado de ese contenido, mostrando las imágenes, enlaces y otros elementos que hayamos incluido.

Kernel

El «kernel» en la arquitectura de Jupyter se refiere al proceso de ejecución asociado a un documento. En este proceso se ejecutarán las sentencias de código incluidas en el documento.

Cada documento tiene un kernel de ejecución independiente. Sin embargo, dentro de un mismo documento de Jupyter se usa siempre el mismo kernel. Esto quiere decir que podemos escribir cualquier número de bloques de código en el documento y que todos ellos comparten el mismo flujo de ejecución. El código se ejecutará en el lenguaje que se haya escogido al crear el documento, que en nuestro caso será Python 3.

Aunque se declaren una vez en una celda, los bloques de código pueden ejecutarse varias veces, pulsando repetidas veces el botón de «play». Esto produce la ejecución repetida de las mismas sentencias de ese bloque en el kernel, manteniendo la memoria de todas las ejecuciones pasadas. Para ayudarnos a entender el flujo de ejecución de los bloques, a la izquierda de cada celda hay un número entre corchetes, que indica el orden de ejecución de los scripts de código.

En la siguiente imagen puedes ver como el valor de la variable «x» se puede compartir entre todas las celdas, ya que se ejecuta todo el código en el mismo kernel. Además, vemos que el orden de ejecución (mostrado en los corchetes de la izquierda) hace que, al mostrar el valor de la variable x en el bloque del medio, ésta tenga un valor de 30.

Para ayudarnos a controlar el flujo de ejecución de los bloques de código del documento existe un menú en la parte de arriba llamado «Kernel», que permite hacer acciones como reiniciar el kernel o reiniciar y eliminar todas las salidas anteriores.

Añadir otros Kernel a JupyterLab

Como mencionamos anteriormente, existen diversos lenguajes con los que podemos trabajar en los notebooks de Jupyter. En principio tenemos solamente disponible Python, pero podríamos usar kernels de otros lenguajes como R, Scala, Javascript… Para conseguir esta utilidad necesitamos, no obstante, instalar el soporte al kernel deseado por medio de la línea de comandos del servidor. Generalmente los distintos kernel disponibles son ofrecidos por terceros desarrolladores y las instrucciones de instalación pueden variar. Por ejemplo, para instalar el kernel de Javascript podemos dirigirnos a este repositorio de GitHub, donde encontraremos las instrucciones detalladas.

Code Consoles

Otra de las actividades que podemos realizar dentro de JupyterLab es trabajar con consolas de código, que permiten escribir y ejecutar código en un lenguaje de programación en modo interactivo.Desde el menú «File > New > Console» podemos crear una nueva sesión con la consola. Podremos ver entonces el intérprete de Python y escribir código en un campo de texto. Para ejecutar el código pulsamos la combinación de teclas «Shift + Enter». También podemos abrir una consola que comparta el mismo kernel que un Jupyter notebook. Una manera rápida de conseguirlo es desde el menú contextual que aparece al hacer clic con el botón derecho en la pestaña del documento que deseemos usar como kernel de base.

Terminales

Desde JupyterLab también podemos abrir terminales de línea de comandos que se ejecutarán dentro del sistema operativo donde se encuentra instalada la aplicación.

Podemos abrir un terminal nuevo desde «File > New > Terminal». Entonces veremos que aparece una ventana donde podemos ejecutar comandos de consola sobre el sistema operativo. En la consola podremos encontrar las mismas carpetas y archivos que hemos generado dentro de la misma aplicación web.

Cómo usar entornos virtuales en Jupyter Notebooks

Los desarrolladores de Python tienen la costumbre de usar entornos virtuales (Python Virtual Environments) para gestionar las dependencias de manera autónoma para cada proyecto. Esto es muy necesario en el día a día, dado que cada desarrollo tiene sus requisitos, que se satisfacen habitualmente con versiones diferentes de las mismas librerías.

Existen varias alternativas para crear entornos virtuales en Python, siendo una de las más conocidas Virtualenv. Por supuesto, también podemos usar esta herramienta en los Jupyter Notebooks. Para instalarla necesitamos abrir una consola de Python. En ella escribimos el siguiente comando:

pip install --user virtualenv

source .myenv/bin/activate

Por regla general, recuerda reiniciar el Kernel después de instalar librerías con pip, para asegurarte que estén disponibles en el sistema.

A continuación vamos a realizar los siguientes pasos en una consola del sistema. Para abrirla hacemos uso del menú «File > New > Terminal». Vamos a crear una carpeta para el proyecto en el que queramos trabajar:

mkdir miproyecto

A continuación entramos en la carpeta que acabamos de crear:

cd miproyecto

Allí podemos crear el entorno virtual, igual que estamos acostumbrados a hacer habitualmente:

python3 -m venv .myenv

El nombre del entorno virtual que hemos seleccionado «.myenv» es configurable a nuestro gusto. Esto creará una carpeta específica para almacenar el propio entorno de Python con el nombre «.myenv». Dado que empieza por punto, será una carpeta oculta. Esto es algo que hacemos por costumbre, aunque realmente no es absolutamente necesario que la carpeta del entorno virtual quede oculta. Ahora podemos activar el entorno virtual con el comando:

source .myenv/bin/activate

En el siguiente paso vamos a crear un kernel específico de Python, lo que nos permitirá configurarlo en Jupyter, de modo que cuando iniciemos un notebook podamos seleccionarlo y así disponer de nuestro entorno virtual activo. Para ello necesitamos instalar la librería ipykernel:

pip install ipykernel

Posteriormente podemos lanzar el comando de creación del kernel, con un comando como este:

ipython kernel install --user --name=miproyecto

El nombre es configurable, pero generalmente usarás el mismo que el del proyecto que estamos creando. Con estos pasos hemos podido configurar un nuevo kernel en Jupyter. Ahora, cuando creemos un nuevo proyecto podremos indicar el kernel que deseamos usar  desde el desplegable, donde aparecerá la opción «miproyecto», o el nombre que hayamos asignado al nuevo kernel configurado.

Desde la opción «File > New Launcher» también encontraremos botones para crear un notebook o una consola de Python usando el kernel que acabamos de instalar.

Conclusión

Con esta guía estamos seguros que podrás comenzar a sacar partido a JupyterLab, una excelente herramienta para implementar flujos de trabajo en diferentes escenarios, con soporte en las más variadas necesidades profesionales. Explorar las distintas posibilidades de los Jupyter notebooks te llevará un tiempo, pero existe una excelente comunidad que ha ido aportando soluciones a los más variados temas.