Tutorial

Cómo configurar Jupyter Notebook con Python 3 en Ubuntu 20.04 y conectar a través de los túneles SSH

PythonUbuntu 20.04

Introducción

Jupyter Notebook es una aplicación web de código abierto que le permite crear y compartir código interactivo, visualizaciones y mucho más. Esta herramienta puede utilizarse con varios lenguajes de programación, como Python, Julia, R, Haskell y Ruby. A menudo se utiliza para trabajar con datos, modelos estadísticos, y aprendizaje automático.

Jupyter Notebooks (o simplemente “Notebooks”) es un conjunto de documentos producidos por la aplicación Jupyter Notebook, la cual contiene tanto elementos de código informático como de texto enriquecido (párrafos, ecuaciones, cifras y enlaces, entre otros) que ayudan a presentar y compartir la investigación que puede reproducirse. Por tanto, puede ser una herramienta excelente para las presentaciones basadas en datos o basadas en programación, o como herramienta de enseñanza.

Este tutorial mostrará cómo configurar Jupyter Notebook para que se ejecute desde un servidor Ubuntu 20.04, y demostrará cómo conectar y usar Notebook desde un equipo local a través de la tunelación. Al final de esta guía, podrá ejecutar código de Python 3 usando un Jupyter Notebook en ejecución en un servidor remoto.

Requisitos previos

Para completar esta guía, debe disponer de una instancia de servidor de Ubuntu 20.04 nueva con un firewall básico y un usuario no root con privilegios sudo configurados. Puede aprender a configurar esto en nuestro tutorial de configuración inicial para servidores.

Paso 1: Configurar Python

Para iniciar el proceso, instalaremos las dependencias que necesitamos para nuestro entorno de programación de Python desde los repositorios de Ubuntu. Ubuntu 20.04 viene preinstalado con Python 3. Usaremos el pip del administrador de paquetes de Python para instalar componentes adicionales un poco más tarde.

Necesitaremos primero actualizar el índice de paquetes local apt y luego descargaremos e instalaremos los paquetes:

  • sudo apt update

A continuación, instale pip y los archivos de encabezado de Python, utilizados por algunas dependencias de Jupyter:

  • sudo apt install python3-pip python3-dev

Ahora podemos proceder a configurar un entorno virtual de Python en el que instalaremos Jupyter.

Paso 2: Crear un entorno virtual de Python para Jupyter

Ahora Python 3, sus archivos de encabezado y pip están listos para comenzar, podemos crear un entorno virtual de Python para administrar nuestros proyectos. Instalaremos Jupyter en este entorno virtual.

Para ello, primero necesitaremos acceso al comando virtualenv, que podemos instalar con pip.

Actualice pip e instale el paquete escribiendo lo siguiente:

  • sudo -H pip3 install --upgrade pip
  • sudo -H pip3 install virtualenv

El indicador -H garantiza que la política de seguridad defina la variable de entorno home como el directorio de inicio del usuario de destino.

Con virtualenv ya instalado, podemos comenzar a crear nuestro entorno. Cree un directorio en el que podamos guardar los archivos de nuestro proyecto y posiciónese en él: Daremos a este directorio el nombre my_project_dir, pero deberá usar un nombre que sea significativo para usted y para el trabajo que está desarrolle.

  • mkdir ~/my_project_dir
  • cd ~/my_project_dir

En el directorio del proyecto, crearemos un entorno virtual de Python. A los efectos de este tutorial, le daremos el nombre my_project_env, pero debería asignarle uno que se relacione con su proyecto.

  • virtualenv my_project_env

Con esto, se creará un directorio llamado my_project_env dentro de su directorio my_project_dir. Dentro de este, se instalarán una versión local de Python y una versión local de pip. Podemos usar esto para instalar y configurar un entorno aislado de Python para Jupyter.

Antes de instalar Jupyter, debemos activar el entorno virtual. Puede hacerlo escribiendo lo siguiente:

  • source my_project_env/bin/activate

Su línea de comandos cambiará para indicar que ahora realizará operaciones en un entorno virtual de Python. Su línea de comandos ahora leerá algo como esto: (my_project_env)user@host:~/my_project_dir$.

En este momento, está listo para instalar Jupyter en este entorno virtual.

Paso 3: Instalar Jupyter

Una vez activado su entorno virtual, instale Jupyter con la instancia local de pip.

Nota: Cuando se active el entorno virtual (cuando (my_project_env) se encuentre al inicio de su línea de comandos), use pip en lugar de pip3, incluso si emplea Python 3. La copia del entorno virtual de la herramienta siempre se llama pip, independientemente de la versión de Python.

  • pip install jupyter

En este punto, habrá instalado con éxito todo el software necesario para ejecutar Jupyter. Ahora podremos iniciar el servidor de Notebook.

Paso 4: Ejecutar Jupyter Notebook

Ya dispone de todo lo que necesita para ejecutar Jupyter Notebook. Para ejecutarlo, introduzca el siguiente comando:

  • jupyter notebook

Se mostrará un registro de las actividades de Jupyter Notebook en el terminal. Cuando se ejecuta Jupyter Notebook, este funciona en un número de puerto específico. Normalmente, el primer notebook que ejecute usará el puerto 8888. Para verificar el número de puerto específico en el que se ejecuta Jupyter Notebook, consulte el resultado del comando utilizado para iniciarlo:

Output
[I 21:23:21.198 NotebookApp] Writing notebook server cookie secret to /run/user/1001/jupyter/notebook_cookie_secret [I 21:23:21.361 NotebookApp] Serving notebooks from local directory: /home/sammy/my_project_dir [I 21:23:21.361 NotebookApp] The Jupyter Notebook is running at: [I 21:23:21.361 NotebookApp] http://localhost:8888/?token=1fefa6ab49a498a3f37c959404f7baf16b9a2eda3eaa6d72 [I 21:23:21.361 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation). [W 21:23:21.361 NotebookApp] No web browser found: could not locate runnable browser. [C 21:23:21.361 NotebookApp] Copy/paste this URL into your browser when you connect for the first time, to login with a token: http://localhost:8888/?token=1fefa6ab49a498a3f37c959404f7baf16b9a2eda3eaa6d72

Si ejecuta Jupyter Notebook en una computadora local (no en un servidor), puede dirigirse a la URL que se muestra para conectarse a Jupyter Notebook. Si ejecuta Jupyter Notebook en un servidor, deberá establecer conexión con este usando túneles SSH como se indica en la siguiente sección.

En este punto, podrá mantener la conexión SSH abierta y Jupyter Notebook en ejecución, o bien cerrar la aplicación y volver a ejecutarla una vez que configure los túneles SSH. Optaremos por detener el proceso de Jupyter Notebook. Lo ejecutaremos de nuevo una vez que configuremos los túneles SSH. Para detener el proceso de Jupyter Notebook, presione CTRL+C, escriba Y y luego presione ENTER para confirmar. Se mostrará el siguiente resultado:

Output
[C 21:28:28.512 NotebookApp] Shutdown confirmed [I 21:28:28.512 NotebookApp] Shutting down 0 kernels

A continuación, configuraremos un túnel SSH para poder acceder al Notebook.

Paso 5: Establecer conexión con el servidor usando túneles SSH

En esta sección, mostraremos cómo establecer una conexión con la interfaz web de Jupyter Notebook usando túneles SSH. Debido a que Jupyter Notebook se ejecutará en un puerto específico en el servidor (como el :8888 y el :8889, entre otros), los túneles SSH le permiten establecer conexión con el puerto del servidor de forma segura.

En los dos apartados siguientes, se describe la forma de crear un túnel SSH desde 1) un Mac o Linux y 2) Windows. Consulte el apartado que corresponda a su computadora local.

Túeneles SSH con una Mac o Linux

Si está usando un equipo local Mac o Linux, los pasos para crear el túnel SSH son similares a usar SSH para iniciar sesión en su servidor remoto, excepto que hay parámetros adicionales en el comando ssh. En este apartado, se describirán los parámetros adicionales necesarios en el comando ssh para implementar un túnel con éxito.

Esta implementación es posible ejecutando el siguiente comando SSH en una nueva ventana del terminal local:

  • ssh -L 8888:localhost:8888 your_server_username@your_server_ip

El comando ssh abre una conexión SSH, pero -L especifica que se debe reenviar el puerto determinado en el host local (cliente) al host y puerto determinados en el lado remoto (servidor). Esto significa que todo lo que está en ejecución en el segundo número de puerto (por ejemplo 8888) en el servidor aparecerá en el primer número de puerto (por ejemplo 8888) en su computadora local.

Cambie de forma opcional el puerto 8888 por uno que elija para evitar usar un puerto ya utilizado por otro proceso.

server_username es su nombre de usuario (por ejemplo sammy) en el servidor que creó y your_server_ip es la dirección IP de su servidor.

Por ejemplo, para el nombre de usuario sammy y la dirección del servidor 203.0.113.0, el comando sería el siguiente:

  • ssh -L 8888:localhost:8888 sammy@203.0.113.0

Si no se produce ningún error después de ejecutar el comando ssh -L, podrá desplazarse a su entorno de programación y ejecutar Jupyter Notebook:

  • jupyter notebook

Verá un resultado con una URL. Desde un navegador web en su máquina local, abra la interfaz web de Jupyter Notebook con la URL que comienza con http://localhost:8888. Asegúrese de que el número de token esté incluido o ingrese la cadena de número de token cuando se solicite en http://localhost:8888.

Túneles SSH con Windows y Putty

Si usa Windows, puede crear un túnel SSH usando Putty.

Primero, ingrese la dirección URL o IP del servidor como el nombre de host, como se muestra:

Establecer el nombre de host para el túnel SSH

A continuación, haga clic en SSH en la parte inferior del panel izquierdo, para expandir el menú, y luego en Tunnels. Introduzca el número del puerto local que quiera usar para acceder a Jupyter en su máquina local. Seleccione 8000, o un número mayor, para evitar los puertos utilizados por otros servicios y fije el destino en localhost:8888, donde :8888 sea el número del puerto en el que se ejecute Jupyter Notebook.

Luego, haga clic en el botón Add. Deberían aparecer los puertos en la lista de Forwarded ports:

Lista de Forwarded ports

Por último, haga clic en el botón Open para establecer conexión con el servidor a través de SSH y crear un túnel entre los puertos deseados. Diríjase a http://localhost:8000 (o cualquier puerto que haya elegido) en un navegador web para conectarse al Jupyter Notebook que funciona en el servidor. Asegúrese de que el número de token esté incluido, o ingrese la cadena de número de token cuando se solicite en http://localhost:8000.

Paso 6: Usar Jupyter Notebook

Esta sección repasa el uso básico de Jupyter Notebook. Si Jupyter Notebook aún no está en ejecución, inícielo con el comando jupyter notebook.

Con esto, debería establecer conexión con este usando un navegador web. Jupyter Notebook es una herramienta muy poderosa que dispone de muchas características. En esta sección se mostrarán algunas de las características básicas para que comience a usar Notebook. Jupyter Notebook mostrará todos los archivos y las carpetas en el directorio desde el que se ejecuta. Por ello, cuando trabaje en un proyecto asegúrese de iniciarlo desde el directorio del proyecto.

Para crear un nuevo archivo de Notebook, seleccione New > Python 3 en el menú desplegable que se encuentra en la parte superior derecha:

Crear un nuevo notebook de Python 3

Con esto se abrirá un Notebook. Ahora podemos ejecutar el código de Python en la celda o cambiar la celda a lenguaje de marcado. Por ejemplo, cambie la primera celda para aceptar el lenguaje de marcado haciendo clic en Cell > Cell Type > Markdown en la barra de navegación de la parte superior. Con esto, podremos escribir notas usando el lenguaje de marcado e incluso incluir ecuaciones escritas en LaTeX disponiéndolas entre los símbolos de $$. Por ejemplo, escriba lo siguiente en la celda después del cambio a lenguaje de marcado:

# First Equation

Let us now implement the following equation:
$$ y = x^2$$

where $x = 2$

Para convertir el marcado en texto con formato, pulse las teclas CTRL y ENTER. Debería obtener un resultado similar al siguiente:

Resultados de lenguaje de marcado

Puede utilizar las celdas de lenguaje de marcado para crear notas y documentar su código. Implementaremos esa ecuación e imprimiremos el resultado. Haga clic en la celda superior, luego pulse las teclas ALT y ENTER juntas para añadir una celda debajo. Introduzca el siguiente código en la nueva celda.

x = 2
y = x**2
print(y)

Para ejecutar el código, presione CTRL+ENTER. Obtendrá los siguientes resultados:

Resultado de la primera ecuación

Ahora podrá importar módulos y usar el Notebook como lo haría con cualquier otro entorno de desarrollo de Python.

Conclusión

¡Felicitaciones! Ahora debería poder escribir código y notas de Python que puedan reproducirse en lenguaje de marcado usando Jupyter Notebook. Si desea acceder a una visita rápida de Jupyter Notebook desde la interfaz, seleccione Help > User Interface Tour en el menú de navegación superior para obtener más información.

A partir de aquí, puede iniciar un proyecto de análisis y visualización de datos leyendo Análisis y visualización de datos con pandas y Jupyter Notebook en Python 3.

0 Comments

Creative Commons License