2012-06-04 21 views
79

Quiero copiar el código Python ya sangrado/funciones y clases enteras en IPython. Cada vez que intento la sangría se atornilla y me sale mensaje de error siguiente:¿Cómo funciona el magic% paste de IPython?

IndentationError: unindent does not match any outer indentation level (<ipython-input-23-354f8c8be51b>, line 12)

If you want to paste code into IPython, try the %paste and %cpaste magic functions.

+3

que sé, es probablemente ya esté en stackoverflow, pero no lo encontró después de 3 búsquedas, así que agregué mi propia versión. – Framester

Respuesta

121

No se puede copiar directamente a IPython. Estos son los pasos:

  1. Copiar las líneas que desea copiar en IPython en el portapapeles
  2. Introduzca %paste en IPython
  3. pulsando la tecla enter
  4. beneficio!
+39

% paste requiere Tkinter, por lo que si no tiene otra buena apuesta es% cpaste – yekta

+54

Puede copiar el código directamente a IPython: es posible que primero tenga que deshabilitar la sangría automática escribiendo '% autoindent'. – EOL

+0

Gracias EOL! +1 para usted – Framester

32

Una aclaración sobre los pasos:

  • En primer lugar, copie las líneas de destino en el portapapeles.

  • en la solicitud del IPython:

    • Si en Tkinter: entrar %paste
    • lo contrario: entrar %cpaste
  • Pegar (Ctrl-V) y pulsa enter.

  • Luego escriba -- y presione enter.

Por ejemplo:

In [1]: %cpaste 
Pasting code; enter '--' alone on the line to stop or use Ctrl-D. 
:for l in "Hello World": 
: print l, 
:-- 
H e l l o W o r l d 
+0

No tiene que presionar Ctrl-V. Solo escribe% paste y presiona enter. – SeF

2

%paste requiere Tkinter. Si estás en Ubuntu, puede instalarlo por

sudo apt-get install python-tk 

continuación, reinicie ipython y utilizar %paste a pegar desde el portapapeles.

0

Una de las respuestas útiles se perdió en los comentarios, por lo que quería volver a expresarlo junto con la adición de una referencia para otra función mágica útil de IPython.

Primero para repetir lo que dijo @EOL, una forma de resolver el problema de OP es desactivar la autodentación ejecutando primero %autoindent y haciendo el pegado (no es necesario si está usando %paste, por supuesto).

Ahora, para agregar más información a lo que ya existe aquí, otro modo útil en IPython es %doctest_mode, que le permite copiar el ejemplo de pegar y probar los fragmentos de las cadenas de documentación. Esto también es útil para ejecutar la salida de sesión interactiva de Python que puede encontrar en la documentación y en los foros en línea, sin tener que borrar primero las cadenas de aviso.

13

A partir de IPython 5 que no es necesario ningún comando mágico, justo en la pasta

ipython5

Gracias a prompt_toolkit, IPython ahora es compatible con:

  • como resaltado de sintaxis escribe
  • Real edición multilínea (up y d teclas de flecha propios mueven entre líneas) pasta
  • multilínea sin romper la sangría o inmediatamente la ejecución de código
  • mejor interfaz de finalización de código (tenemos la intención de mejorar la que más) soporte de ratón opcional

Más información sobre este here

para actualizar ipython a la última versión

pip install ipython --upgrade 
+0

¿Es posible pegar líneas múltiples y ejecutar el código automáticamente en cada línea? –

+0

sí, solo pega el código y presiona enter. si quieres depurar echa un vistazo a% pdb o ipdb. [ejemplo] (https://github.com/ipython/ipython/issues/9642) – Levon

+0

wow its aweomse –

0

Para los usuarios de Ubuntu que están en Python 3.

El python-tk es para Python 2.

Para hacer %paste trabajo en Python 3, instale el paquete de python3-tk:

sudo apt-get install python3-tk