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.

Framester
źródło
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!
Framester
źródło
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
Yuly
źródło
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 
Levon
źródło
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.

ChillarAnand
źródło
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.

haridsv
źródło
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
utapyngo
źródło