2012-06-04 1 views
79

Ich möchte bereits eingerückten Python-Code/ganze Funktionen und Klassen in IPython kopieren. Jedesmal, wenn ich die Vertiefung versuchen wird geschraubt und ich bekomme folgende Fehlermeldung:Wie funktioniert die magische% -Paste von 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

Ich weiß, es ist wahrscheinlich schon auf stackoverflow, aber es hat es nach 3 Suchen nicht gefunden, also habe ich meine eigene Version hinzugefügt. – Framester

Antwort

121

Sie nicht zu IPython direkt kopieren. Dies sind die Schritte:

  1. Kopieren Sie die Zeilen, die Sie in IPython in die Zwischenablage kopieren möchten
  2. Geben Sie %paste in IPython
  3. Presse
  4. Profit eingeben!
+39

% paste erfordert Tkinter, also, wenn Sie nicht haben, dass eine andere gute Wette ist% cpaste – yekta

+54

Sie können Code tatsächlich direkt in IPython kopieren: Sie müssen möglicherweise zuerst die automatische Einrückung deaktivieren, indem Sie% autoindent eingeben. – EOL

+0

Danke EOL! +1 für Sie – Framester

32

Eine Klärung auf der Stufe:

  • Kopieren Sie zunächst Zielzeilen in der Zwischenablage.

  • Typ in die ipython prompt:

    • Wenn auf Tkinter: Geben Sie %paste
    • Ansonsten: %cpaste
  • Paste (Ctrl-V) eingeben und drücken Sie die Eingabetaste.

  • Geben Sie dann -- ein und drücken Sie die Eingabetaste.

Zum Beispiel:

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

Sie müssen nicht Strg-V. Geben Sie nur% einfügen ein und drücken Sie die Eingabetaste. – SeF

2

%paste erfordert Tkinter. Wenn Sie in ubuntu sind, können Sie es durch

sudo apt-get install python-tk 

installieren Starten Sie dann ipython und verwenden %paste aus der Zwischenablage einzufügen.

0

Eine der nützlichen Antworten wurde in den Kommentaren verloren, also wollte ich sie zusammen mit einer Referenz für eine andere nützliche IPython-Zauberfunktion neu formulieren.

Zuerst um zu wiederholen, was @EOL sagte, eine Möglichkeit zur Lösung von OP's Problem ist, Auto-Einrückung zu deaktivieren, indem Sie zuerst %autoindent ausführen und die Paste (nicht erforderlich, wenn Sie %paste natürlich verwenden).

Nun, um weitere Informationen zu dem, was bereits hier ist hinzuzufügen, ein weiterer nützlicher Modus in IPython ist %doctest_mode, mit dem Sie kopieren Beispiel kopieren und Schnipsel aus Doc-Strings testen können. Dies ist auch nützlich, um interaktive Python-Session-Ausgaben auszuführen, die Sie in Dokumentationen und Online-Foren finden können, ohne die Eingabeaufforderungs-Strings zuerst auszublenden.

13

Ab IPython 5 Sie keine Magie Befehl benötigen, nur fügen Sie diesen

ipython5

Dank prompt_toolkit unterstützt IPython jetzt:

  • Syntax-Hervorhebung als Sie geben
  • Real Multi-Line-Bearbeitung (up und d eigene Pfeiltasten bewegen zwischen den Zeilen)
  • Multi-line-Paste ohne Einzug zu brechen oder sofort die Ausführung von Code
  • besseren Code-Vervollständigung Schnittstelle (wir planen, dass mehr) Optional Maus-Unterstützung auf diesem

Mehr zu verbessern here

um ipython auf die neueste Version zu aktualisieren

pip install ipython --upgrade 
+0

Ist es möglich, mehrere Zeilen einzufügen und den Code automatisch für jede Zeile auszuführen? –

+0

ja, einfach den Code einfügen und Enter drücken. Wenn Sie debuggen möchten, überprüfen Sie% pdb oder ipdb. [Beispiel] (https://github.com/ipython/ipython/issues/9642) – Levon

+0

wow es aweomse –

0

für Ubuntu-Benutzer, die auf Python 3.

Die python-tk für Python ist 2.

Um %paste Arbeit auf Python 3, installieren Sie das python3-tk Paket zu machen:

sudo apt-get install python3-tk