Wie funktioniert IPythons magische% -Paste?


93

Ich möchte bereits eingerückten Python-Code / ganze Funktionen und Klassen in IPython kopieren. Jedes Mal, wenn ich es versuche, wird die Einrückung durcheinander gebracht und ich erhalte die folgende Fehlermeldung:

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 bereits im Stackoverflow, aber es wurde nach 3 Suchen nicht gefunden, also habe ich meine eigene Version hinzugefügt.
Framester

Antworten:


136

Sie können nicht direkt nach IPython kopieren. Dies sind die Schritte:

  1. Kopieren Sie die Zeilen, die Sie in IPython kopieren möchten, in die Zwischenablage
  2. Geben Sie %pasteIPython ein
  3. Drücken Sie Enter
  4. Profitieren!

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

61
Sie können Code tatsächlich direkt nach IPython kopieren: Möglicherweise müssen Sie zuerst die automatische Einrückung durch Eingabe deaktivieren %autoindent.
Eric O Lebigot

Danke EOL! +1 für Sie
Framester

5
In können Ipython 5 Sie einfach den Code einfügen. Ich brauche nicht %pastemehr. Lesen Sie diese Antwort .
Levon

1
Sie brauchen das% vorher auch pastenicht.
Worte für den

40

Eine Klarstellung der Schritte:

  • Kopieren Sie zunächst die Zielzeilen in Ihre Zwischenablage.

  • Geben Sie in die iPython-Eingabeaufforderung Folgendes ein:

    • Wenn auf Tkinter: eingeben %paste
    • Ansonsten: eingeben %cpaste
  • Einfügen (Strg-V) und drücken Sie die Eingabetaste.

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

Beispielsweise:

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
Sie müssen nicht Strg-V drücken. Geben Sie nur% paste ein und drücken Sie die Eingabetaste.
SeF

21

Ab Ipython 5 benötigen Sie keinen magischen Befehl, fügen Sie ihn einfach ein

ipython5

Dank prompt_toolkit, IPythonunterstützt jetzt:

  • Syntaxhervorhebung während der Eingabe
  • Echte mehrzeilige Bearbeitung (Aufwärts- und Abwärtspfeiltasten bewegen sich zwischen den Zeilen)
  • Mehrzeiliges Einfügen, ohne die Einrückung zu unterbrechen oder Code sofort auszuführen
  • Bessere Code-Vervollständigungsschnittstelle (wir planen, diese weiter zu verbessern) Optionale Mausunterstützung

Mehr dazu hier

So aktualisieren Sie ipythonauf die neueste Version

pip install ipython --upgrade 

Ist es möglich, mehrere Zeilen einzufügen und den Code automatisch in jeder Zeile auszuführen?
Eric Duminil

Ja, fügen Sie einfach den Code ein und drücken Sie die Eingabetaste. Wenn Sie debuggen möchten, überprüfen Sie% pdb oder ipdb. Beispiel
Levon

Dies unterstützt auch die Ausgabe des Python-Repl-Codes, der mit drei >Zeichen wie diesem beginnt :>>> a = 1 + 2
Flimm

Die ganze Zeit habe ich% cpaste gemacht .. nett!
Gershon Herczeg

1
Ich denke, es hängt von der Umgebung ab, aus der Sie das Einfügen durchführen und wie Sie das Einfügen durchführen. Mein Kollege verwendet die Windows 10-Eingabeaufforderung für SSH in unserem Linux-Host, öffnet dort ipython in einem Docker-Container und versucht, bereits eingerückten Code einzufügen (durch Klicken mit der rechten Maustaste ), und er erhält sogar in iPython 7.8.0 zusätzliche Einrückungen. Ich verstehe das Rechtsklickverhalten der Eingabeaufforderung so, dass sie tatsächlich nur das nimmt, was sich in der Zwischenablage befindet, und es Zeichen für Zeichen ausgibt, als ob Sie es eingeben. IPython kann also nicht erkennen, dass Sie tatsächlich einfügen.
Kal

6

%paste erfordert Tkinter. Wenn Sie in Ubuntu sind, können Sie es von installieren

sudo apt-get install python-tk

Wenn Sie auf Python3 sind

sudo apt-get install python3-tk

Starten Sie dann ipython neu und verwenden Sie es, %pasteum es aus Ihrer Zwischenablage einzufügen .


1

Eine der nützlichen Antworten ging in den Kommentaren verloren, daher wollte ich sie wiederholen und eine Referenz für eine andere nützliche IPython-Zauberfunktion hinzufügen.

Um das zu wiederholen, was @EOL gesagt hat, besteht eine Möglichkeit, das Problem von OP zu lösen, darin, die automatische Einrückung zu deaktivieren, indem Sie zuerst das Einfügen ausführen und ausführen %autoindent(dies wird %pastenatürlich nicht benötigt, wenn Sie es verwenden ).

Um weitere Informationen zu den bereits vorhandenen Informationen hinzuzufügen %doctest_mode, können Sie in IPython einen weiteren nützlichen Modus kopieren, um Beispiele einzufügen und Snippets aus Dokumentzeichenfolgen zu testen. Dies ist auch nützlich, um interaktive Python-Sitzungsausgaben auszuführen, die Sie in der Dokumentation und in Online-Foren finden, ohne zuerst die Eingabeaufforderungszeichenfolgen entfernen zu müssen.


1

Für Ubuntu-Benutzer, die Python 3 verwenden.

Das python-tkist für Python 2.

%pasteInstallieren Sie das python3-tkPaket , um mit Python 3 arbeiten zu können :

sudo apt-get install python3-tk
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.