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? 🙂
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?
- Instalar distribute. Para ello, descarga el archivo de
distribute_setup.py
y haz doble clic sobre él. - 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:
1 |
easy_install pyreadline |
- Instala IPython. Para ello, escribe ahora:
1 |
easy_install ipython |
Si todo ha ido bien, si inicias IPython deberías ver algo como lo que aparece en la imagen.
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:
[sourcecode language=”python”]
In [1]: import nu
numbers numpy
In [1]: import num
[/sourcecode]
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
:
[sourcecode language=”python”]
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
[/sourcecode]
También funciona con variables definidas por nosotros:
[sourcecode language=”python”]
In [2]: foobar = 24 ** 2
In [3]: fo
foobar for format
In [3]: fo
[/sourcecode]
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
:
[sourcecode language=”python”]
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
[/sourcecode]
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 ?
:
[sourcecode language=”python”]
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]
[/sourcecode]
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:
[sourcecode language=”python”]
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)
[/sourcecode]
Y, si salimos y volvemos a IPython:
[sourcecode language=”python”]
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
[/sourcecode]
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
1 |
$ ipython2 notebook |
Aparecerán una serie de mensajes indicando la configuración del servidor y se abrirá una ventana del navegador.
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!
Excelente post sobre IPython no conocia de su historia me parecio muy interesante 😀
Saludos
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!
Pingback: Bitacoras.com
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.
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.
Jum, creo que también hay un problema con el PATH de Windows. Ahora mismo no lo puedo comprobar, pero añadiré las instrucciones precisas en el artículo en seguida.
http://blog.sadphaeton.com/2009/01/20/python-development-windows-part-2-installing-easyinstallcould-be-easier.html
¡Gracias por el bug report!
Pingback: El notebook de IPython « Pybonacci
Pingback: Un 2012 de Python científico « Pybonacci
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, acabo de ver la luz gracias a ti xD Lo he añadido a la entrada, ¡gracias! 😀
Jajaja… tampoco es para tanto 🙂
Abrazos y gracias por tener este blog tan útil!
P.D.: el mío es http://gracca.github.io
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.
¡Pues tiene muchas más cosas interesantes hombre! 😛 ¿Has echado un vistazo al notebook? 🙂
http://pybonacci.org/2012/11/02/el-notebook-de-ipython/
Pingback: Enlaces semana #30 | Dev attitude
Pingback: Enlaces semana #31 | Dev attitude
Pingback: ¿Python en la nube? Cloud computing de forma sencilla | CAChemECAChemE
Pingback: Descubre Python en 30 minutos - Podcast #1 - CAChemE
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
¡Efectivamente! A todos nos falta mucho recorrido para llegar hasta donde ha llegado Fernando, pero lo mejor es que además es una excelente persona y muy trabajador 🙂 Te animo a que escuches la entrevista que le hicimos:
http://pybonacci.org/2013/05/16/entrevista-a-fernando-perez-creador-de-ipython/
¡Un saludo!
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
Hola, estoy casi convencido de que has usado
sudo pip install
. Es una práctica muy recomendada y a la vez muy errónea, te recomiendo que uses virtualenv para tratar de crear un entorno aislado en tu sistema o que directamente descargues Anaconda http://continuum.io/anaconda¡hola
Soy nuevo en IPython y utilizar el notebook con kernel octava. ¿Cómo puedo importar un código “.m” a una notebook octava?
Hola marcello, no te entiendo bien la pregunta – mejor que preguntes en https://groups.google.com/forum/#!forum/scipydata-es. ¡Un saludo!
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
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