Python - Ejecutar un entorno virtual dentro de Jupyter notebook

17 de Marzo de 2018

Los Jupyter notetbooks son super prácticos cuando se trata de explorar datos en Python. Ademas del código se puede integrar imágenes y documentación, por eso son perfectos para capacitaciones o para compartir dentro de un equipo.
Pero como hacemos cuando queremos ejecutar un virtual env  (entorno virtual) dentro de un notebook? Es lo que vamos a ver a continuación y es bastante fácil!

Instalar Jupyter

Yo uso Python 3.6 en Windows.

>pip install jupyter
...
Successfully installed ipykernel-4.8.2 ipywidgets-7.1.2 jupyter-1.0.0 jupyter-client-5.2.3 jupyter-console-5.2.0 jupyter-core-4.4.0 qtconsole-4.3.1 widgetsnbextension-3.1.

Ejecutar Jupyter notebook

Para ejecutar Jupyter notebook es tan fácil como:
>jupyter notebook

Eso nos va habrir el URL http://localhost:8888/tree dentro de nuestro navegador.
Si ya usamos el puerto 8888 por un otro servicio podemos escoger el puerto. Por ejemplo para lanzar Jupyter el en puerto 8889, añadimos la opción: --port=8889.

Instalar y configurar un entorno virtual

Para crear un notebook, hacemos clic en el botón New y luego Python 3.
Ahora tenemos que crear un virtual env. Lo llamo "GIS", es donde voy a instalar todos mis módulos especializados en SIG:
>python -m venv gis

Luego, lo activo:
>gis\Scripts\activate.bat
(gis) >

Instalamos el módulo Shapely. Como estoy en Windows, uso la wheel de este fantástico sitio.
(gis) >pip install Shapely-1.6.4.post1-cp36-cp36m-win_amd64.whl
Processing shapely-1.6.4.post1-cp36-cp36m-win_amd64.whl
Installing collected packages: Shapely
Successfully installed Shapely-1.6.4.post1

Y luego el módulo ipykernel (todavia dentro del virtual env):
(gis) >pip install ipykernel
...
Successfully installed colorama-0.3.9 decorator-4.2.1 ipykernel-4.8.2 ipython-6.2.1 ipython-genutils-0.2.0 jedi-0.11.1 jupyter-client-5.2.3 jupyter-core-4.4.0 parso-0.1.1 pickleshare-0.7.4 prompt-toolkit-1.0.15 pygments-2.2.0 python-dateutil-2.7.0 pyzmq-17.0.0 simplegeneric-0.8.1 six-1.11.0 tornado-5.0 traitlets-4.3.2
wcwidth-0.1.7

Verificamos que esté bien instalado:
(gis) >ipython
Python 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 18:41:36) [MSC v.1900 64 bit (AMD64)]
Type 'copyright', 'credits' or 'license' for more information
IPython 6.2.1 -- An enhanced Interactive Python. Type '?' for help.

In [1]: import shapely

In [2]: shapely.__version__
Out[2]: '1.6.4.post1'

Ahora el paso importante, necesitamos configurar un kernel IPython para nuestro entorno virtual "gis":
(gis) >python -m ipykernel install --user --name gis --display-name "GIS virtual env"
Installed kernelspec gis in C:\Users\Pierre\AppData\Roaming\jupyter\kernels\gis
El valor que ponemos para la opción --display-name, es lo que veremos en la página del notebook. Mas detalles aquí.

Salimos del entorno virtual:
(gis) >deactivate
>

Ejecutar el entorno virtual dentro del notebook

Lanzamos el Jupyter notebook de nuevo:
>jupyter notebook

Ahora, cuando hacemos clic en el buton New, vemos nuestro virtual env "GIS virtual env" dentro de la lista de opciones.



Dentro de nuestro nuevo notebook, podemos importar todos los modulos del entorno virtual gis.


Lo mejor es que no necesitamos lanzar el entorno virtual para que esté disponible dentro del notebook. Jupyter lo hace para nosotros. Y obviamente, podemos tener varios entornos configurados de esta manera. Una otra razón para usarlos más!

Twittear