Pybonacci

Computación Científica con Python en castellano

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

with 17 comments

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 :P

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!

About these ads

Written by Juanlu001

2 de julio de 2012 a 19:43

Publicado en Artículos

Etiquetado con , , ,

17 comentarios

Suscríbete a los comentarios mediante RSS.

  1. Excelente post sobre IPython no conocia de su historia me parecio muy interesante :D

    Saludos

    macagua

    2 de julio de 2012 at 20:46

    • 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!

      Juanlu001

      2 de julio de 2012 at 20:48

  2. Información Bitacoras.com…

    Valora en Bitacoras.com: No hay resumen disponible para esta anotación…

    Bitacoras.com

    3 de julio de 2012 at 15:26

  3. 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.

    Daniel

    10 de julio de 2012 at 16:38

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

    Daniel

    10 de julio de 2012 at 17:23

  5. [...] hablamos en su momento de IPython, un intérprete de Python con multitud de características avanzadas que lo hacían indispensable para ejecutar sesiones [...]

    El notebook de IPython « Pybonacci

    2 de noviembre de 2012 at 17:52

  6. [...] aun no has probado IPython? Lo puedes probar online desde PythonAnywhere. Puedes leer nuestra introducción a IPython o nuestro artículo sobre el notebook de [...]

  7. 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!

    Germán Racca

    1 de agosto de 2013 at 21:32

  8. 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.

    Jaime

    2 de agosto de 2013 at 5:15

  9. […] notebook de IPython – Introduccion a IPython : Dos anotaciones de pybonacci sobre este… lo que sea, que expande el concepto de linea de […]

    Enlaces semana #30 | Dev attitude

    4 de agosto de 2013 at 21:06

  10. […] notebook de IPython – Introduccion a IPython : Dos anotaciones de pybonacci sobre este… lo que sea, que expande el concepto de linea de […]

    Enlaces semana #31 | Dev attitude

    25 de agosto de 2013 at 20:46

  11. […] IPython es un interprete interactivo avanzado que ha revolucionando la manera en que se utiliza Python en ámbitos científicos, conferencias y tutoriales. Inspirados por los notebooks de Mathematica y Sage, el notebook de IPython es una interfaz web para IPython. El blog de Pybonacci, que debería de estar ya en tu lista de favoritos, habló del mismo hace un año: Introducción a IPython, mucho más que un intérprete de Python. […]

  12. […] revolución que ha supuesto IPython y IPython […]


¡Deja un comentario!

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

Únete a otros 1.103 seguidores

%d personas les gusta esto: