IPython의 매직 % paste는 어떻게 작동합니까?


93

이미 들여 쓰기 된 Python 코드 / 전체 함수 및 클래스를 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
나는 이미 stackoverflow에 있지만 3 번 검색 후에도 찾지 못 했으므로 내 버전을 추가했습니다.
Framester 2012-06-04

답변:


136

IPython에 직접 복사 할 수 없습니다. 단계는 다음과 같습니다.

  1. IPython에 복사하려는 줄을 클립 보드에 복사합니다.
  2. %pasteIPython에 들어가십시오
  3. 엔터 키를 치시오
  4. 이익!

47
% paste는 Tkinter를 필요로하므로 다른 좋은 방법이 없다면 % cpaste입니다
yekta dec.

61
실제로 코드를 IPython에 직접 복사 할 수 있습니다. 먼저를 입력하여 자동 들여 쓰기를 비활성화해야 할 수 있습니다 %autoindent.
Eric O Lebigot 2013 년

감사합니다 EOL! +
Framester 2013 년

5
에서 Ipython 5 방금 코드를 붙여 넣을 수 있습니다. %paste더 이상 필요 하지 않습니다. 이 대답을 읽으십시오 .
Levon

1
앞에 %가 필요하지 않습니다 paste.
wordsforthewise

40

단계에 대한 설명 :

  • 먼저 대상 라인을 클립 보드에 복사합니다.

  • iPython 프롬프트에 다음을 입력합니다.

    • Tkinter의 경우 : 다음을 입력하십시오. %paste
    • 그렇지 않으면 : 입력 %cpaste
  • 붙여 넣기 (Ctrl-V)하고 Enter 키를 누릅니다.

  • 그런 다음 입력 --하고 Enter 키를 누르십시오.

예를 들면 :

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
Ctrl-V는 필요하지 않습니다. % paste를 입력하고 Enter를 누르십시오.
SeF

21

현재 Ipython 5 당신이 어떤 마법의 명령을하지 않아도, 그냥 붙여 넣기

ipython5

덕분에 prompt_toolkit, IPython지금 지원

  • 입력 할 때 구문 강조
  • 실제 여러 줄 편집 (위쪽 및 아래쪽 화살표 키가 줄 사이에서 이동)
  • 들여 쓰기를 중단하거나 코드를 즉시 실행하지 않고 여러 줄 붙여 넣기
  • 더 나은 코드 완성 인터페이스 (더 개선 할 계획) 선택적 마우스 지원

여기에서 더 자세히

ipython최신 버전으로 업그레이드하려면

pip install ipython --upgrade 

여러 줄을 붙여넣고 각 줄에서 자동으로 코드를 실행할 수 있습니까?
Eric Duminil

예, 코드를 붙여넣고 Enter를 누르세요. 디버그하려면 % pdb 또는 ipdb를 확인하십시오.
Levon 2017 년

이것은 또한 다음 >과 같은 세 개의 기호로 시작하는 코드 인 Python repl의 출력을 지원합니다 .>>> a = 1 + 2
Flimm

이 모든 시간 동안 나는 % cpaste .. 멋지다!
Gershon Herczeg

1
내가 생각하는 가에 따라 환경 당신이 붙여 넣기를 수행하고있는 방법 당신이 붙여 넣기를하는거야? 제 동료는 Windows 10의 명령 프롬프트를 사용하여 Linux 호스트에 SSH로 연결하고 Docker 컨테이너에서 ipython을 열고 ( 마우스 오른쪽 버튼을 클릭하여 ) 이미 들여 쓰기 된 코드를 붙여 넣으려고 시도 하며 iPython 7.8.0에서도 추가 들여 쓰기를 얻습니다. 명령 프롬프트의 오른쪽 클릭 동작을 이해하는 방법은 실제로 클립 보드에있는 모든 것을 가져 와서 입력하는 것처럼 문자별로 출력한다는 것입니다. 따라서 iPython은 실제로 붙여넣고 있는지 알 수있는 방법이 없습니다.
Kal

6

%paste 필요합니다 Tkinter. 우분투에있는 경우 다음을 통해 설치할 수 있습니다.

sudo apt-get install python-tk

Python3을 사용하는 경우

sudo apt-get install python3-tk

그런 다음 ipython을 다시 시작하고 사용 %paste하여 클립 보드에서 붙여 넣습니다.


1

유용한 답변 중 하나가 주석에서 손실되었으므로 다른 유용한 IPython 매직 기능에 대한 참조를 추가하면서 다시 설명하고 싶었습니다.

먼저 @EOL이 말한 것을 다시 말하면 OP의 문제를 해결하는 한 가지 방법은 먼저 실행 %autoindent하고 붙여 넣기를 수행하여 자동 들여 쓰기를 끄는 것 %paste입니다 (물론을 사용하는 경우에는 필요하지 않음 ).

이제 여기에 이미있는 것에 더 많은 정보를 추가하기 위해 IPython의 또 다른 유용한 모드는 %doctest_mode문서 문자열에서 예제 붙여 넣기 및 테스트 스 니펫을 복사 할 수 있도록하는 것입니다. 이것은 또한 프롬프트 문자열을 먼저 제거하지 않고도 문서 및 온라인 포럼에서 찾을 수있는 대화 형 파이썬 세션 출력을 실행하는 데 유용합니다.


1

Python 3을 사용하는 우분투 사용자의 경우.

python-tk파이썬 2입니다.

%pastePython 3에서 작업 하려면 python3-tk패키지를 설치하십시오 .

sudo apt-get install python3-tk
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.