Como usar VENV (ambiente virtual) con notebooks de Jupyter en VS Code
Tags: jupyter, vscode, virtualenvironment, venv
Published: 2020-12-21 23:49:10

![Portada](https://dev-to-uploads.s3.amazonaws.com/i/hwdspv3ri52hlk26exzw.png)

Jupyter es una gran herramienta para desarrollar scripts con python, especialmente para trabajar con datos (como en mi caso).

## ¿Por qué Jupyter? ¿Por qué en VS Code?

Bueno, viniendo de un perfil de desarrollador (back-end, pruebas automatizadas, aplicaciones móviles), mucho tiempo utilicé Visual Studio (para desarrollo de back-end) y cuando Microsoft liberó un software más ligero, multiplataforma y que de igual forma permite desarrollar diversas aplicaciones en diversos lenguajes; sin duda alguna tenía que darle una oportunidad. Y me gustó. Por eso actualmente, habiéndome mudado al mundo de los datos, me fue mucho más fácil utilizar VS Code como “IDE” (ya que no es propiamente un IDE) para desarrollar procesos/scripts para trabajar con datos. En este nuevo mundo (de los datos) me encontré con Jupyter, que me permitió desarrollar esos procesos/scripts de forma más fácil y controlada al momento de la ejecución (si es necesario posteriormente lo convierto a un script ejecutable).

Tiempo después de comenzar a utilizar Jupyter, descubrí que VS Code permite ejecutar sus notebooks (instalando el paquete ipykernel). Entonces, ahora puedo usar dos herramientas que necesito para el trabajo, de forma conjunta.

## Ok, pero ¿por qué usar ambientes virtuales?

Porque esto nos permite utilizar librerías, en alguna versión específica, en nuestros proyectos sin afectar algún otro proyecto que dependa de las mismas librerías pero en diferentes versiones.

Utilizar un ambiente virtual para el desarrollo de un proyecto en python es relativamente sencillo, ya que basta con utilizar venv para crearlo dentro del directorio raíz del proyecto.

Ahora bien, ¿es posible usar un ambiente virtual con un notebook de Jupyter en VS Code?

**¡Si!**

En este post te explicaré como crear un ambiente virtual usando venv para trabajar con notebooks de Jupyter en VS Code.

Decidí crear este post debido a que invertí algo de tiempo investigando como hacer funcionar un ambiente virtual con un notebook y después de varias lecturas e intentos, que no funcionaron, por fin hallé la solución por mera casualidad.

Si lo deseas puedes descargar el proyecto de prueba que utilicé para realizar el contenido de este post. Accede al repositorio aquí.

## Crear ambiente virtual

Primero, abre el proyecto en VS Code y cierra todos los notebooks (si estuviera alguno abierto).

![Espacio de trabajo vacío](https://dev-to-uploads.s3.amazonaws.com/i/h3du6gde0xzlxwln9wmi.png)

Segundo, ejecuta la siguiente instrucción en la terminal integrada.

_python -m venv .venv_

Esto creará el directorio “.venv” con todo lo necesario para el ambiente virtual. También se mostrará un mensaje que dice que se detectó un nuevo ambiente virtual y pregunta si quieres seleccionarlo para el directorio del espacio de trabajo. Da clic en “Sí”.

![Activar ambiente virtual](https://dev-to-uploads.s3.amazonaws.com/i/8pwumgqo976x42tzh32b.png)

Si el mensaje no se presenta, puedes activar el ambiente virtual ejecutando esta instrucción en la terminal:

_.venv\Scripts\activate_

Ahora, cierra la terminal y abre una nueva terminal, para validar que el ambiente virtual funciona correctamente.

![Ambiente activo](https://dev-to-uploads.s3.amazonaws.com/i/7yt99blrh8ymysvfup09.png)

## Utilizar el ambiente virtual con el notebook

El ambiente virtual ya fue creado y puede utilizarse con el proyecto. Pero, ¿cómo lo uso con mi notebook?

Ya que tienes el ambiente, si ejecutas el notebook… va a fallar.

¿Por qué?

Porque el ambiente no cuenta con las librerías que se requieren y deberán ser instaladas al finalizar la configuración del notebook.

_Si el notebook corre exitosamente, algo salió mal (no reconoce el ambiente virtual y está utilizando las librerías de la instalación principal de python); será mejor eliminar los directorios que se crearon en el proceso (.venv y .vscode) y comenzar de nuevo._

Bien. Ahora sí, abre el notebook. Al abrir el notebook aparecerá un mensaje que pide instalar ipykernel, que es necesario para ejecutar los notebooks, así que da clic en “instalar”.

![Instalar ipykernel](https://dev-to-uploads.s3.amazonaws.com/i/fq0zwdzjc0ehg4ayv9nl.png)

Si el mensaje no se muestra, puedes instalar ipkernel con la siguiente instrucción en la terminal (con venv activado):

_python -m pip install ipkernel_

— [Cómo instalar y usar pip.](https://pip.pypa.io/en/stable/installing/) —

Cuando la instalación termine, hay que seleccionar el intérprete para el notebook. Esto se logra dando clic en la esquina superior derecha del notebook (esto es lo que descubrí por mera casualidad). Se mostrará un menú con los intérpretes disponibles y debes seleccionar el que tiene “(.venv)” en el nombre.

![Elegir intérprete](https://dev-to-uploads.s3.amazonaws.com/i/sd2qqbl28a9vwr8exvcr.png)

**¡Listo!**

Ya has configurado tu notebook para usar un ambiente virtual.

![Intérprete seleccionado](https://dev-to-uploads.s3.amazonaws.com/i/zpozn0vv4xtztfxxs31j.png)

## ¿Qué sigue?



Como mencioné anteriormente, el notebook no se ejecutará satisfactoriamente ya que el ambiente virtual no cuenta con las librerías necesarias, por lo que ahora sólo resta instalar las librerías que se requieren para ejecutar el notebook.

— [Cómo instalar librerías y paquetes en python.](https://micro.recursospython.com/recursos/como-instalar-modulos-y-paquetes.html) —

Y para probar que todo funciona correctamente, ejecuta el notebook…

![Resultado de la ejecución](https://dev-to-uploads.s3.amazonaws.com/i/66rfdl47l2xdhj4r8ehr.png)

¡Perfecto! Todo salió bien.

## Bonus
Si usas Git para el control de versión de tu notebook, hay un paso más a realizar.

Cuando se crea el ambiente virtual y se selecciona para usar con el ambiente de trabajo, se crean 2 directorios: .venv y .vscode. Estos directorios no son necesarios para el proyecto y podría causar conflictos si lo clonamos en otros equipos ya que inicialmente no estaría configurado el ambiente virtual, por lo que será mejor agregarlos al archivo **.gitignore**:

![Exclusiones en .gitignore](https://dev-to-uploads.s3.amazonaws.com/i/ufur8cwnmojdr9fbvmch.png)

## La despedida

Bueno, espero que no haya sido una lectura pesada y que te sea de ayuda.