Jupyter


Inicialmente serían algunas notas sobre la configuración y uso de Jupyter Lab, pero se amplió a los notebooks y algunas cosas más. Entonces pensé en generalizar esto con proyecto Jupyter. Aún «work in progress» 🙂 .


Índice

Introducción

  1. Instalación y actualización
  2. Uso
    1. Arranque
    2. Notas
    3. Jupyter
    4. Jupyterlab
    5. Kernels
    6. VS Code
  3. Troubleshooting

Referencias

Introducción

El Proyecto Jupyter1 nació del proyecto IPython. A medida que el proyecto evolucionó, el concepto giró y giró, hasta convertirse en algo que podía soportar múltiples lenguajes. Hoy, creo yo, es ya una tecnología. Como recordatorio, el nombre Jupyter es un acrónimo indirecto de los tres lenguajes principales para los que fue diseñado: JUlia, PYThon y R.

Jupyter Lab es la evolución del proyecto en un entorno de desarrollo interactivo basado en web para libretas, código y datos de Jupyter. Además es extensible y modular mediante complementos que se agregan o se integran con los existentes o a nuevos componentes.

1. Instalación y actualización

Para instalar Jupyter Lab, empleando, por ejemplo, pip o conda:

$ pip install jupyterlab

o

$ conda install jupyterlab

2. Uso

Aquí, algunas notas en cuanto al uso o curiosidades de esta plataforma. Por el momento sin ningún orden o clasificación.

2.1. Arranque

Regularmente el navegador por defecto abrirá con la interfaz de inicio para Jupyter o Jupyter Lab. En el caso de este último, las instrucciones para hacerlo manualmente se dan también en la consola:

To access the notebook, open this file in a browser:
file:///home/evasd/.local/share/jupyter/runtime/nbserver-101-open.html
Or copy and paste one of these URLs:
http://localhost:8888/?token=e8605db6f3f7ffc1143ffe7e29ac40a02f9f5592479fddfb
or http://127.0.0.1:8888/?token=e8605db6f3f7ffc1143ffe7e29ac40a02f9f5592479fddfb

2.2. Notas

2.2.1 Editando una libreta en dos vistas

Muy útil para comparar (lado a lado, side-by-side) resultados desplegados en diferentes celdas de un notebook. Click derecho sobre la pestaña (tab) para desplegar el menú contextual. Seleccionar New View for Notebook. Una nueva pestaña será abierta.

2.2.2. Renombrando una libreta

2.2.3. Como personalizar los atajos de teclado

2.2.4. ¿Password?

2.2.5 Identando un bloque de código en una celda

Tab para indentar, Shift + Tab para «desindentar».

2.3. Jupyter

2.4. Jupyter Lab

2.5. Kernels

Un kernel  es un programa que se encarga de ejecutar código. Por ejemplo IPython incluye un kernel para código Python, pero hay otros kernels disponibles para otros lenguajes. Para el caso de conda, ipykernel ya está incluido (de cualquier modo, lo indicado a continuación sirve para éste) pero no ocurre así con otros administradores (como virtualenv, por ejemplo).

a) Para instalar un kernel, lo primero es contar el kernel propiamente, que se obtiene creando el correspondiente entorno (en los siguientes ejemplos «entorno» debe substituirse por el nombre del entorno que se quiere crear). Por ejemplo para virtualenv:

$ python virtualenv entorno -p python3

o en el caso de conda:

$ conda create -n entorno python=3.8

b) Dentro de dicho entorno (activándolo), se instala ipykernel; pip para virtualenv (como se muestra), pip o conda para (Ana|Mini)conda.

$ pip install ipykernel

c) Para que el kernel esté disponible dentro de Jupyter, se debe registrarlo (en este ejemplo, sólo para el usuario actual):

$ python -m ipykernel install --user --name entorno --display-name "el nombre de mi entorno"

Finalmente, para remover un kernel, por ejemplo:

$ ipython kernel remove nombre-del-kernel

2.6. Visual Studio Code

VS Code permite ejecutar Jupyter notebooks con la ayuda de algunas extensiones5.

3. Troubleshooting

Esta es (por el momento) una recopilación de algunos errores o dificultades que se han experimentado de primera mano durante la instalación y uso del ecosistema de Jupyter Lab. Cada entrada se identifica por el mensaje de error o condición del problema, seguida por la descripción y posible solución.

Jupyter Lab no arranca (pese a estar instalado) o «Connection refused» es presentado en el browser.

Ya me pasó que, pese a estar instalado, en la primer invocación, el entorno no arrancó. Algunas cosas que he hecho cuando se ha presentado esto son:

Volver a intentarlo
Sip, aunque parezca la «típica solución de usuario», antes de ponerse a arreglar algo que no necesita arreglo, conviene hacer una segunda prueba, pero razonada. Esto me ha ocurrido cuando, por ejemplo: El browser detecta que no es el navegador por defecto y pregunta si quiere cambiarse esto. Al parecer esto rompe alguna secuencia de acciones y ni el servidor ni el cliente responden. Ya sea que se conteste sí o no la pregunta, al segundo intento puede haber una respuesta.
Reiniciar el equipo
Sip, otra típica solución de usuario, pero puede funcionar.

«No browser found«

Este mensaje aparece al intentar arrancar el servicio. La consola mostrará:

$ jupyter lab
...
[I 11:01:01.109 LabApp] The Jupyter Notebook is running at:
[I 11:01:01.109 LabApp] http://localhost:8888/?token=e8605db6f3f7ffc1143ffe7e29ac40a02f9f5592479fddfb
[I 11:01:01.111 LabApp] or http://127.0.0.1:8888/?token=e8605db6f3f7ffc1143ffe7e29ac40a02f9f5592479fddfb
[I 11:01:01.113 LabApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[W 11:01:01.124 LabApp] No web browser found: could not locate runnable browser.
...

Una posible causa es que no esté indicado cuál es el navegador a abrir por defecto, que puede ser también causado por la ausencia del archivo de configuración. Si no existe este archivo, éste puede crearse con:

$ jupyter lab --generate-config
Writing default config to: /home/evasd/.jupyter/jupyter_notebook_config.py

Dentro de éste buscar la sección correspondiente al comentario:

## Specify what command to use to invoke a web browser when opening the notebook

y en ella, escribir lo necesario para abrir el navegador favorito, por ejemplo habilitar Google Chrome en Windows:

import webbrowser
webbrowser.register('chrome', None, webbrowser.GenericBrowser('/c/"Program Files (x86)/Google/Chrome/Application/chrome.exe"'))
webbrowser.open('http://localhost:8888')
c.NotebookApp.browser = 'chrome'

es posible que en el sistema operativo se requiera de una variable de ambiente, por ejemplo para Google Chrome en Windows con WLS:

export BROWSER="/c/Program Files (x86)/Google/Chrome/Application/chrome.exe"

«Jupyter Lab not found«

Al tratar de arrancar el servicio, se presenta el error mostrado abajo, ya sea porque algo quedó mal en la instalación o porque no está instalado.

$ jupyter lab
Traceback (most recent call last):
File "/home/evasd/miniconda3/envs/evamodels/bin/jupyter", line 10, in <module>
sys.exit(main())
File "/home/evasd/miniconda3/envs/evamodels/lib/python3.6/site-packages/jupyter_core/command.py", line 230, in main
command = _jupyter_abspath(subcommand)
File "/home/evasd/miniconda3/envs/evamodels/lib/python3.6/site-packages/jupyter_core/command.py", line 133, in _jupyter_abspath
'Jupyter command `{}` not found.'.format(jupyter_subcommand)
Exception: Jupyter command `jupyter-lab` not found.

Se corrige (re)instalando la aplicacion (ver Instalación y actualización).

«Connection lost» o sesiones de terminal no cerradas (colgadas)

Los problemas de conexión son comunes cuando se está trabajando remotamente a donde reside el servidor de Jupyter Lab (como es el caso de SageMaker); especialmente cuando se trabaja con terminales. Cualquier intermitencia o retraso en la red puede hacer que las sesiones de terminal se cierren, dejando el proceso colgado. Dos forma de lidiar con este problema son (en orden preferente):

  • Retomar la sesión desde Jupyter.
  • Matar los procesos de terminales colgadas.

«IOPub data rate exceeded«

La consola muestra el mensaje de error:

[W 2021-12-04 17:34:11.033 ServerApp] IOPub data rate exceeded.
The Jupyter server will temporarily stop sending output
to the client in order to avoid crashing it.
To change this limit, set the config variable
`--ServerApp.iopub_data_rate_limit`.

seguido de los valores actuales en la configuración. Esto puede ser provocado, por ejemplo, por una celda con el código:

with open('NLP_task_data.txt') as f:
    lines = f.readlines()
    print(lines)

Esto puede ser arreglado declarando en el archivo de configuración el parámetro ServerApp.iopub_data_rate_limit. El mencionado archivo de configuración puede no existir. Se crea con:

$ jupyter lab --generate-config

y una vez generado puede buscarse el parámetro mencionado, que seguramente aparecerá comentado. Descomentarlo y ajustar el valor de ser necesario. Una alternativa, si no se quiere generar el archivo de configuración y trabajar con los parámetros por defecto, es indicar este valor en la línea de comando con el valor requerido, e.g.:

$ jupyter lab --ServerApp.iopub_data_rate_limit 1e10

Referencias

  1. «Project Jupyter«, jupyter.org, web. Visited: 2020.05.12. URL: https://jupyter.org/.
  2. Giannis Doukas, «Jupyter kernels«, github.com, web. Visited: 2020.05.13. URL: https://github.com/jupyter/jupyter/wiki/Jupyter-kernels.
  3. «Installation«, jupyter.org, web. Visited: 2020.05.12. URL: https://jupyterlab.readthedocs.io/en/stable/getting_started/installation.html.
  4. Jeff Hale, «How to Customize JupyterLab Keyboard Shortcuts«, towardsdatascience.com, web. Published: 2018.09.23; visited: 2020.05.12. URL: https://towardsdatascience.com/how-to-customize-jupyterlab-keyboard-shortcuts-72321f73753d.
  5. «Working with Jupyter Notebooks in Visual Studio Code«, visualstudio.com, web. Visited: 2020.05.21. URL: https://code.visualstudio.com/docs/python/jupyter-support#_setting-up-your-environment/.

Entradas en el blog

  1. «The Jupyter ecosystem«, partes 1, 2, 3.

Twitter Wordpress eMail
© Todos los derechos reservados.
Dr. Eduardo René Rodríguez Avila
Creación: 2019.07.223
Última actualización: 2021.12.04
El contenido de este sitio puede ser copiado y reproducido libremente mientras no sea alterado y se cite su origen. Marcas y productos registrados son citados por referencia y sin fines de lucro o dolo. Todas las opiniones son a título personal del o los autores de éstas y, salvo sea expresado de otro modo, deben considerarse como registro y expresión de la experiencia de uso de aquello que es tratado. Para conocer más sobre la posición de privacidad y responsabilidad de lo que se presenta en este sitio web y como ha sido obtenido, consulte la declaración al respecto.