Jak działa magiczna pasta% IPython?


95

Chcę skopiować już wcięty kod Pythona / całe funkcje i klasy do IPythona. Za każdym razem, gdy próbuję, wcięcie jest schrzanione i pojawia się następujący komunikat o błędzie:

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
Wiem, prawdopodobnie jest już na stackoverflow, ale nie znalazłem go po 3 wyszukiwaniach, więc dodałem własną wersję.
Framester

Odpowiedzi:


139

Nie możesz kopiować bezpośrednio do IPython. Oto kroki:

  1. Skopiuj do schowka wiersze, które chcesz skopiować do IPythona
  2. Wejdź %pastedo IPython
  3. Naciśnij enter
  4. Zysk!

47
% paste wymaga jednak Tkintera, więc jeśli nie masz tego innego dobrego zakładu, to% cpaste
yekta

61
W rzeczywistości możesz skopiować kod bezpośrednio do IPythona: być może będziesz musiał najpierw wyłączyć automatyczne wcięcie, wpisując %autoindent.
Eric O Lebigot

Dzięki EOL! +1 dla Ciebie
Framester

5
W Ipython 5 możesz po prostu wkleić kod. Już nie potrzebuję %paste. Przeczytaj tę odpowiedź .
Levon,

1
Nie potrzebujesz przedtem% paste.
słowa z dnia

40

Wyjaśnienie kroków:

  • Najpierw skopiuj linie docelowe do schowka.

  • Wpisz w zachęcie iPythona:

    • Jeśli na Tkinter: wpisz %paste
    • W przeciwnym razie: wprowadź %cpaste
  • Wklej (Ctrl-V) i naciśnij Enter.

  • Następnie wpisz --i naciśnij Enter.

Na przykład:

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
Nie musisz używać Ctrl-V. Wpisz tylko% wklej i naciśnij Enter.
SeF

23

Od Ipythona 5 nie potrzebujesz żadnego magicznego polecenia, po prostu wklej go

ipython5

Dzięki prompt_toolkit, IPythonteraz obsługuje:

  • Podświetlanie składni podczas pisania
  • Prawdziwa edycja wieloliniowa (klawisze strzałek w górę iw dół poruszają się między wierszami)
  • Wklejanie w wielu wierszach bez przerywania wcięć lub natychmiastowego wykonywania kodu
  • Lepszy interfejs uzupełniania kodu (planujemy to bardziej ulepszyć) Opcjonalna obsługa myszy

Więcej na ten temat tutaj

Aby zaktualizować ipythondo najnowszej wersji

pip install ipython --upgrade 

Czy można wkleić wiele wierszy i automatycznie wykonać kod w każdym wierszu?
Eric Duminil

tak, po prostu wklej kod i naciśnij Enter. jeśli chcesz debugować, sprawdź% pdb lub ipdb. przykład
Levon

Obsługuje to również dane wyjściowe kodu >>>> a = 1 + 2
replik

Przez cały ten czas robiłem% cpaste… fajnie!
Gershon Herczeg,

1
ja że to zależy od środowiska, z którego wykonujesz wklejanie i jak to robisz? Mój kolega używa wiersza poleceń systemu Windows 10 do SSH na naszym hoście Linuksa, otwiera ipython w kontenerze Dockera i próbuje wkleić już wcięty kod ( klikając prawym przyciskiem myszy ), i dostaje dodatkowe wcięcie nawet w iPythonie 7.8.0. Sposób, w jaki rozumiem zachowanie prawego przycisku myszy w wierszu polecenia, polega na tym, że po prostu pobiera wszystko, co jest w schowku i wyświetla je znak po znaku, tak jakbyś to pisał. Tak więc iPython nie ma możliwości dowiedzenia się, że faktycznie wklejasz.
Kal

6

%paste wymaga Tkinter. Jeśli jesteś w systemie Ubuntu, możesz go zainstalować przez

sudo apt-get install python-tk

Jeśli korzystasz z Python3

sudo apt-get install python3-tk

Następnie uruchom ponownie ipython i użyj %pastedo wklejania ze schowka.


2

Jedna z przydatnych odpowiedzi zaginęła w komentarzach, dlatego chciałem ją powtórzyć, dodając odniesienie do innej użytecznej magicznej funkcji IPythona.

Po pierwsze, aby powtórzyć to, co powiedział @EOL, jednym ze sposobów rozwiązania problemu OP jest wyłączenie automatycznego wcięcia przez pierwsze uruchomienie %autoindent i wklejenie (oczywiście niepotrzebne, jeśli używasz %paste).

Teraz, aby dodać więcej informacji do tego, co już tu jest, jeszcze jeden przydatny tryb w IPythonie to %doctest_modemożliwość kopiowania przykładu wklejania i testowania fragmentów z ciągów dokumentów. Jest to również przydatne do wykonywania interaktywnych danych wyjściowych sesji Pythona, które można znaleźć w dokumentacji i na forach internetowych, bez konieczności uprzedniego usuwania ciągów znaków zachęty.


1

Dla użytkowników ubuntu korzystających z Pythona 3.

Plik python-tkJest dla Pythona 2.

Aby %pastepracować nad Pythonem 3, zainstaluj python3-tkpakiet:

sudo apt-get install python3-tk
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.