¿Alguien puede señalarme una configuración de trabajo para usar babel con IPython?
Estoy presenciando un extraño comportamiento de sangría cuando intento definir funciones. Esto sucede si especifico o no la --classicbandera org-babel-python-command. Mi comando actual (ejecutar Linux con Emacs 24.4):
(setq org-babel-python-command 
      "ipython --pylab=qt4 --pdb --nosep --classic --no-banner --no-confirm-exit")
Esto no funciona con definiciones de funciones.
#+BEGIN_SRC python :session *Broken IPython* :results output pp
  def g(x, lst):
      if isinstance(x, float):
          x = x + 0
      return [item + x for item in lst]
#+END_SRC

Esto tampoco parece estar relacionado --classicya que obtengo el mismo error:

Puntos de bonificación si tiene una configuración funcional que no me obliga a usar, --classicya que me gusta el formato de la interfaz "moderna".
Actualizar
El uso del comando mágico me permite definir funciones y evaluar una sesión, pero no puedo obtener un valor sin una. En cambio, obtengo:
#+BEGIN_SRC python :results output
   def f(x):
       return x + 2
   f(2)
#+END_SRC
#+RESULTS:
: >>> ... ... >>> 4
: >>> 
#+BEGIN_SRC python :results value
   def f(x):
       return x + 2
   f(2)
#+END_SRC
#+RESULTS:
No se devuelven resultados, aparentemente debido a que todo el contenido >>>de la salida no se analiza correctamente.

:results valuerequiere que modifique su código de Python agregando unareturndeclaración explícita o asignando a una variablefooy agregando:return fooal encabezado. Pero incluso con esas correcciones no funcionará en ipython: vea mi segundo comentario a mi respuesta a continuación.Respuestas:
El problema es que no puede pegar directamente el código en una sesión de ipython. Una publicación en la lista de correo Org de Arun Persaud ofrece una solución alternativa que emplea el
%cpastecomando mágico. Aquí hay una versión ligeramente simplificada:Después de evaluar lo anterior,
defadvicesu ejemplo funciona para mí. Sin embargo, tengo que preguntar, ¿cuál es el beneficio de usar ipython para el shell inferior? Si está utilizando babel, seguramente no interactuará directamente con el shell.fuente
org-babel-python-evaluate-external-processpara limpiar la salida. ¿Realmente necesitas esto?