Introducción a IPython: mucho más que un intérprete de Python

Introducción

Hoy ha llegado el momento de hablar de IPython, aprovechando que acaba de salir la versión 0.13 después de 6 meses de duro trabajo. IPython es un intérprete de Python con unas cuantas características avanzadas que hemos usado desde que empezamos a escribir en el blog y que, sinceramente, si no conoces todavía no sé a qué estás esperando 😛

Decir que IPython es solo un intérprete de Python es, no obstante, quedarse muy corto. Actualmente multitud de paquetes utilizan IPython como biblioteca o como intérprete interactivo, siendo el ejemplo más notable el proyecto Sage. IPython es multiplataforma, es software libre, tiene una enorme comunidad detrás, un desarrollo constante y bien organizado y es extremadamente potente. ¿Qué más se le puede pedir? 🙂

Captura de la interfaz web (notebook) de IPython, extraída de su web http://ipython.org/ipython-doc/rel-0.13/whatsnew/version0.13.html © Copyright 2008, The IPython Development Team

Breve historia

IPython comenzó en 2001 de la mano de Fernando Pérez, investigador colombiano, cuando completaba su tesis sobre Física de partículas en la Universidad de Colorado. Pérez utilizaba mucho los notebooks de Mathematica, y el intérprete de Python le parecía «un juguete» en comparación[1]. A partir de su propio trabajo y de otros dos proyectos, LazyPython e IPP, surgió lo que años después conocemos por IPython[2].

Lo importante para nosotros de este programa es que nació en un ámbito científico y de la mano de investigadores, pues, como el propio Fernando Pérez hizo notar, el flujo de trabajo en este tipo de ámbitos demanda un entorno interactivo. Ahí tenemos a MATLAB, Maple y Mathematica.

Nota: ¿Sabes que escribimos hace tiempo sobre una alternativa libre a Mathematica escrita en Python?

Instalación

Si estás en Linux (que, por supuesto, es el mejor sistema operativo :P) la forma más directa de instalar IPython es utilizar el gestor de paquetes, centro de software o equivalente que viene en tu distribución, ya sea el Software Centre, aptitude o apt-get en Ubuntu, yum en Fedora y RHEL o pacman en Arch Linux. Si tienes algún problema para instalar IPython en tu distro, no dudes en decírnoslo en los comentarios.

Si estás en Windows, debes instalar primero distribute y readline. Como se puede leer en la documentación, los pasos son los siguientes:

Nota: ¿Sabes que puedes leer nuestra guía sobre cómo instalar Python en Windows si no lo tienes aún?

  1. Instalar distribute. Para ello, descarga el archivo de distribute_setup.py y haz doble clic sobre él.
  2. Instala pyreadline utilizando easy_install, el que acabas de añadir ahora. Para ello abre una ventana de línea de comandos (Ejecutar -> cmd -> OK) y escribe:
easy_install pyreadline
  1. Instala IPython. Para ello, escribe ahora:
easy_install ipython

Si todo ha ido bien, si inicias IPython deberías ver algo como lo que aparece en la imagen.

Consola de IPython en Windows, donde se ven también los comandos de instalación de pyreadline e IPython.

Para Mac, tendrías que instalar IPython utilizando easy_install al igual que hemos hecho en Windows a través de una ventana de línea de comandos.

Nota: Aunque hayamos dado breves indicaciones de instalación en las tres plataformas mayoritarias, ten en cuenta que para el resto del tutorial se asumirá Linux. Si tienes problemas con alguna de las características descritas más adelante, no dudes en indicarlo en los comentarios.

Funciones básicas de IPython

Nada más arrancar la interfaz por línea de comandos de IPython ya nos damos cuenta de que es un poco distinto del intérprete de Python por defecto. Hay algunas características que estaremos aprovechando todo el tiempo:

Auto completado

El auto completado es una característica súper útil para no tener que escribir un código y también, por ejemplo, para inspeccionar objetos rápidamente. Se activa con la tecla Tab; por ejemplo, si tenemos NumPy instalado:

In [1]: import nu
numbers  numpy
In [1]: import num

y si escribimos la letra p y volvemos a presionar Tab, se terminaría de escribir numpy, ya que es la única opción disponible. Podemos explorar, por ejemplo, todas las propiedades del paquete numpy cuyo identificador empiece por e:

In [2]: np.e
np.e            np.empty        np.exp          np.extract
np.ediff1d      np.empty_like   np.exp2         np.eye
np.einsum       np.equal        np.expand_dims
np.emath        np.errstate     np.expm1

También funciona con variables definidas por nosotros:

In [2]: foobar = 24 ** 2
In [3]: fo
foobar    for       format
In [3]: fo

Historial

El historial es una manera de recuperar resultados antiguos que no hemos guardado en una variable. Como las entradas en IPython están numeradas, no hay más que hacer referencia a la salida correspondiente: por ejemplo, si queremos recuperar el resultado obtenido en Out[3], utilizaremos la variable _3:

In [3]: 24 ** 2
Out[3]: 576
In [4]: _  # Esta variable almacena el último resultado
Out[4]: 576
In [5]: _ * 3  # Lo multiplicamos por 3
Out[5]: 1728
In [6]: _3  # Y volvemos a 24 ** 2
Out[6]: 576

Ayuda

La ayuda de IPython nos permite leer la documentación de objetos, funciones, etc. así como el código fuente donde se definieron cuando esté disponible. Ya la hemos utilizado en artículos anteriores, y se invoca utilizando el signo de interrogación ?:

In [7]: import numpy
In [8]: numpy?  # Signo de interrogación
[Documentación del paquete numpy]
In [9]: numpy.linspace?
[Documentación de la función linspace]
In [10]: numpy.linspace??  # Doble signo de interrogación
[Código fuente de la función]

Guardar, editar, cargar

Con IPython también podemos guardar, editar y ejecutar archivos. De esa forma, podemos aprovechar las ventajas del modo interactivo pero llevar un registro de nuestros progresos. Estas funciones se invocan utilizando los comandos «mágicos» %save, %edit y %run.

Nota: El comando %edit lanza el editor de texto en consola por defecto, que en el caso de Linux es Vim. Si te pasa como a mí y este programa te resulta incomprensible :P, tal vez te interese saber que para salir del programa hay que escribir :q!. Como sugiere Germán Racca en los comentarios, puedes añadir EDITOR='nano' en tu .bashrc para cambiar esto. ¡Gracias Germán!

La función %save recibe como argumentos el nombre del archivo que queremos y las líneas que queremos guardar en él. Veamos un ejemplo:

In [3]: import numpy as np
In [4]: x = np.linspace(0, 1)
In [5]: print np.sum(x)
Out[5]: 25.0
In [6]: %save foofile.py 3-5  # Guardamos las líneas 3 a 5 en foofile.py
The following commands were written to file `foofile.py`:
import numpy as np
x = np.linspace(0, 1)
print np.sum(x)
In [7]: !cat foofile.py  # ¡Sorpresa! Ejecutamos comandos de Linux poniendo ! al principio
# coding: utf-8
import numpy as np
x = np.linspace(0, 1)
print np.sum(x)

Y, si salimos y volvemos a IPython:

In [1]: %run foofile.py  # Ejecutamos el archivo foofile.py
25.0
In [2]: %edit foofile.py  # Entramos en la ventana del editor, y dividimos la salida entre 3
 done. Executing edited code...
8.33333333333

Nótese que el código se ejecuta cuando terminamos de editar el archivo. Si hay algún error, IPython nos lo dirá.

Interfaz web: el notebook de IPython

El notebook de IPython está siendo una auténtica revolución. Inspirado en parte en el notebook de Sage, del que exprimió lo mejor y tomó nota de los errores cometidos, ha recibido mucha atención por parte de los desarrolladores en las últimas versiones y ahora es uno de los puntos más interesantes de IPython. Para disfrutar de las nuevas características necesitarás la versión 0.13 de IPython así como Tornado. Para iniciar el notebook, escribe en la línea de comandos

$ ipython2 notebook

Aparecerán una serie de mensajes indicando la configuración del servidor y se abrirá una ventana del navegador.

Notebook de IPython

A partir de aquí, si creas un nuevo notebook tendrás todo el poder de IPython con una interfaz mucho más rica en la que puedes editar y fusionar celdas, insertar texto y ecuaciones matemáticas, exportar los notebooks para compartirlos con otros usuarios y muchísimo más. Y lo vamos a dejar aquí, porque si no nos quedaría un artículo larguísimo.

Hay docenas de cosas que nos estamos dejando en el tintero, y podría hablarse largo y tendido sobre IPython. Si quieres ampliar información, siempre puedes consultar la documentación oficial.

¿Te hemos convencido para utilizar IPython? ¿Te gustaría que escribiésemos más en profundidad sobre el notebook? ¿Ya lo conocías pero te hemos descubierto alguna función interesante? ¡Coméntanos!

Juan Luis Cano

Estudiante de ingeniería aeronáutica y con pasión por la programación y el software libre. Obsesionado con mejorar los pequeños detalles y con ganas de cambiar el mundo. Divulgando Python en español a través de Pybonacci y la asociación Python España.

More Posts - Website

Follow Me:
TwitterLinkedIn

25 thoughts on “Introducción a IPython: mucho más que un intérprete de Python

    1. Muchas gracias! Siempre suelo poner un trocito de la historia del proyecto o de las personas que hay detrás, creo que esto del software libre es muchas veces una cruzada personal a favor del conocimiento y merece la pena recordarlo 🙂

      Un saludo!

  1. Pingback: Bitacoras.com
  2. Después de Instalar el archivo no me reconoce easy_install Como un ejectable y no puedo seguir con la instalación a partir del paso 2.

  3. Creo haber dado con el problema. No se puede acceder al easy_install desde CdPython27. Sino que hay que añadir CdPython27Scripts. Yo lo he descubierto añadiendo al distribute. Un raw_input() para que no se cerrara y poder leer lo que ponía.

  4. Muy bueno tu blog, lo empecé a leer hace poco y me está siendo de gran ayuda!

    Voy a compartir una ayudita con vos: para cambiar el editor por default que utiliza Bash, y usar digamos nano en lugar de vim, basta con poner la línea export EDITOR=’nano’ en el archivo .bashrc de tu home, luego hacés “source .bashrc” y listo, el comando mágico %edit de ipython ahora usará nano en lugar de vim 🙂

    Abrazos y muchas gracias!

  5. Para mí IPython es %timeit. Todo lo demás está muy bien, pero casi siempre que abro una sesión de IPython es por %timeit.

  6. Jajaja las cositas que uno descubre con esos pequeños aportes de historia que nos muestras, no sabia que Fernando era colombiano!! Que bueno saber que es de mi tierra, pero a mi denme unos 10 años para poder hacer algo parecido xD

  7. Hola, mi SO es Ubuntu 14.04, instalé ipython y el notebook, pero al teclear en terminal $ ipython notebook, obtengo lo siguiente:

    Traceback (most recent call last):
    File “/usr/local/bin/ipython”, line 5, in
    from pkg_resources import load_entry_point
    File “/usr/lib/python2.7/dist-packages/pkg_resources.py”, line 2749, in
    working_set = WorkingSet._build_master()
    File “/usr/lib/python2.7/dist-packages/pkg_resources.py”, line 444, in _build_master
    ws.require(__requires__)
    File “/usr/lib/python2.7/dist-packages/pkg_resources.py”, line 725, in require
    needed = self.resolve(parse_requirements(requirements))
    File “/usr/lib/python2.7/dist-packages/pkg_resources.py”, line 628, in resolve
    raise DistributionNotFound(req)
    pkg_resources.DistributionNotFound: traitlets

  8. ¡hola
    Soy nuevo en IPython y utilizar el notebook con kernel octava. ¿Cómo puedo importar un código “.m” a una notebook octava?

  9. hola me ha encantado el articulo, en realidad para trabajar en Python solamente conocìa algunas opciones bien sea en IDE’s (Spyder, Jupyter Notebook, Geany) y editores de texto plano (Gedit , Sublime text) ; pues finalmente trabajar desde terminal escribiendo python3 , muy amable de compartir su conocimiento; quisiera hacer algunas consultas:
    1. Es mejor o son equivalente sobre Notebook y Jupyter Notebook para trabajar en Python
    2. ¿Cualquier librerìa se puede usar en un IDE?, ¿Se puede importar con normalidad, como lo harìa por ejemplo en Geany?
    3. Es de ingeniería aeronáutica estimado Juan Luis Cano, yo soy de ingeniería mecánica de fluidos mucho gusto; cual es la relación que tiene Python y OpenFOAM , estaba leyendo hace poco una documentación y hablaban sobre PyFOAM de que trata cuando hablan asì? , el nombre Py…. me hace pensar que es una extensión de Python para OpenFOAM algo asì?
    4. Pronto tendré que hacer una exposiciòn sobre análisis de datos con Python tendrá alguna lectura corta que me recomiende con ejemplos practicos?
    Bien siento dejar tantas preguntas , pero me parece que usted conoce mucho y estaré agradecido por sus respuestas es todo por ahora, un fuerte abrazo a la distancia.

    Atte.
    Jhon Gesell

  10. Buenas tardes, muy interesante la documentación y sus videos en youtube, le comento tengo un problema cuando intento colocar en el terminal brew install python3 el sistema me arroja este mensaje -bash: brew: command not found, ¿cómo hago la instalación?, gracias

Leave a Reply

Your email address will not be published. Required fields are marked *