Come funziona il magic% paste di IPython?


93

Voglio copiare codice Python già rientrato / intere funzioni e classi in IPython. Ogni volta che provo il rientro è rovinato e ricevo il seguente messaggio di errore:

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
Lo so, probabilmente è già su stackoverflow, ma non l'ha trovato dopo 3 ricerche, quindi ho aggiunto la mia versione.
Framester

Risposte:


136

Non puoi copiare direttamente su IPython. Questi sono i passaggi:

  1. Copia le righe che desideri copiare in IPython negli appunti
  2. Entra %pastein IPython
  3. Premere Invio
  4. Profitto!

47
% paste richiede Tkinter, quindi se non hai un'altra buona scommessa è% cpaste
yekta

61
In realtà puoi copiare il codice direttamente su IPython: potresti dover prima disabilitare l'autoindentazione inserendo %autoindent.
Eric O Lebigot

Grazie EOL! +1 per te
Framester

5
In Ipython 5 puoi semplicemente incollare il codice. Non ne ho %pastepiù bisogno . Leggi questa risposta .
Levon

1
Non hai nemmeno bisogno del% prima paste.
parole per il

40

Un chiarimento sui passaggi:

  • Innanzitutto, copia le linee di destinazione negli appunti.

  • Digita nel prompt di iPython:

    • Se su Tkinter: entra %paste
    • Altrimenti: entra %cpaste
  • Incolla (Ctrl-V) e premi invio.

  • Quindi digita --e premi invio.

Per esempio:

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

3
Non è necessario premere Ctrl-V. Digita solo% paste e premi invio.
SeF

21

A partire da Ipython 5 non hai bisogno di alcun comando magico, basta incollarlo

ipython5

Grazie a prompt_toolkit, IPythonora supporta:

  • Evidenziazione della sintassi durante la digitazione
  • Modifica reale su più righe (i tasti freccia su e giù si spostano tra le righe)
  • Incolla su più righe senza rompere il rientro o eseguire immediatamente il codice
  • Migliore interfaccia di completamento del codice (prevediamo di migliorarla ulteriormente) Supporto mouse opzionale

Maggiori informazioni su questo qui

Per eseguire ipythonl' aggiornamento alla versione più recente

pip install ipython --upgrade 

È possibile incollare più righe ed eseguire il codice automaticamente su ogni riga?
Eric Duminil

sì, incolla il codice e premi invio. se vuoi fare il debug controlla% pdb o ipdb. esempio
Levon

Questo supporta anche l'output del Python repl, codice che inizia con tre >segni come questo:>>> a = 1 + 2
Flimm

Per tutto questo tempo ho fatto% cpaste .. bello!
Gershon Herczeg il

1
Io penso che dipende dal contesto da cui si sta facendo l'incollatura e come si sta facendo l'incollare? Il mio collega sta usando il prompt dei comandi di Windows 10 per SSH nel nostro host Linux, apre ipython in un contenitore Docker lì e cerca di incollare codice già rientrato (facendo clic con il tasto destro ) e ottiene un rientro extra anche in iPython 7.8.0. Il modo in cui capisco il comportamento del clic con il tasto destro del prompt dei comandi è che in realtà prende solo ciò che è negli appunti e lo invia carattere per carattere come se lo stessi digitando. Quindi iPython non ha modo di sapere che stai effettivamente incollando.
Kal

6

%paste richiede Tkinter. Se sei in Ubuntu, puoi installarlo tramite

sudo apt-get install python-tk

Se sei su Python3

sudo apt-get install python3-tk

Quindi riavvia ipython e usa %pasteper incollare dagli appunti.


1

Una delle risposte utili è stata persa nei commenti, quindi ho voluto riformularla insieme ad aggiungere un riferimento per un'altra utile funzione magica IPython.

Per prima cosa, per riaffermare ciò che ha detto @EOL, un modo per risolvere il problema di OP è disattivare il rientro automatico eseguendo prima %autoindente facendo l'incolla (non necessario se stai usando %paste, ovviamente).

Ora, per aggiungere ulteriori informazioni a ciò che è già presente qui, un'altra modalità utile in IPython è %doctest_modeche ti consente di copiare esempi di incolla e testare frammenti da stringhe di documenti. Questo è anche utile per eseguire l'output di sessioni interattive di Python che puoi trovare nella documentazione e nei forum online, senza dover prima rimuovere le stringhe di prompt.


1

Per gli utenti di Ubuntu che utilizzano Python 3.

Il python-tkè per Python 2.

Per %pastelavorare su Python 3, installa il python3-tkpacchetto:

sudo apt-get install python3-tk
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.