IDLE¶
소스 코드: Lib/idlelib/
IDLE은 파이썬의 통합 개발 및 학습 환경입니다.
IDLE에는 다음과 같은 기능이 있습니다:
tkinter
GUI 툴킷을 사용하여, 100% 순수 파이썬으로 코딩되었습니다크로스 플랫폼: 윈도우, 유닉스 및 macOS에서 거의 같게 작동합니다
코드 입력, 출력 및 에러 메시지를 채색하는 파이썬 셸 창 (대화식 인터프리터)
다중 실행 취소, 파이썬 색상 지정, 스마트 들여쓰기, 호출 팁, 자동 완성 및 기타 기능이 있는 다중 창 텍스트 편집기
모든 창 내에서 검색, 편집기 창 내에서 교체 및 여러 파일을 통한 검색 (grep)
지속적인 중단점(breakpoints), 스테핑(stepping) 및 전역과 지역 이름 공간 보기가 있는 디버거
구성, 브라우저 및 기타 대화 상자
시작과 코드 실행¶
-s
옵션으로 시작할 때, IDLE은 환경 변수 IDLESTARTUP
이나 PYTHONSTARTUP
가 참조하는 파일을 실행합니다. IDLE은 먼저 IDLESTARTUP
을 확인합니다; IDLESTARTUP
이 있으면 참조된 파일이 실행됩니다. IDLESTARTUP
이 없으면, IDLE은 PYTHONSTARTUP
을 확인합니다. 이러한 환경 변수가 참조하는 파일은 IDLE 셸에서 자주 사용되는 함수를 저장하거나 공통 모듈을 임포트 하기 위해 import 문을 실행하기에 편리한 장소입니다.
또한, Tk
도 시작 파일이 있으면 로드합니다. Tk 파일은 무조건 로드됨에 유의하십시오. 이 추가 파일은 .Idle.py
이며 사용자의 홈 디렉터리에서 찾습니다. 이 파일의 문장은 Tk 이름 공간에서 실행되므로, 이 파일은 IDLE의 파이썬 셸에서 사용할 함수를 임포트 하는 데 유용하지 않습니다.
명령 줄 사용법¶
idle.py [-c command] [-d] [-e] [-h] [-i] [-r file] [-s] [-t title] [-] [arg] ...
-c command run command in the shell window
-d enable debugger and open shell window
-e open editor window
-h print help message with legal combinations and exit
-i open shell window
-r file run file in shell window
-s run $IDLESTARTUP or $PYTHONSTARTUP first, in shell window
-t title set title of shell window
- run stdin in shell (- must be last option before args)
인자가 있으면:
-
,-c
또는r
이 사용되면, 모든 인자는sys.argv[1:...]
에 배치되고sys.argv[0]
은''
,'-c'
또는'-r'
로 설정됩니다. Options 대화 상자에서 기본값이 설정되어 있어도, 편집기 창이 열리지 않습니다.그렇지 않으면, 인자는 편집을 위해 열리는 파일이며
sys.argv
는 IDLE 자체에 전달된 인자를 반영합니다.
시작 실패¶
IDLE uses a socket to communicate between the IDLE GUI process and the user
code execution process. A connection must be established whenever the Shell
starts or restarts. (The latter is indicated by a divider line that says
‘RESTART’). If the user process fails to connect to the GUI process, it
usually displays a Tk
error box with a ‘cannot connect’ message
that directs the user here. It then exits.
One specific connection failure on Unix systems results from
misconfigured masquerading rules somewhere in a system’s network setup.
When IDLE is started from a terminal, one will see a message starting
with ** Invalid host:
.
The valid value is 127.0.0.1 (idlelib.rpc.LOCALHOST)
.
One can diagnose with tcpconnect -irv 127.0.0.1 6543
in one
terminal window and tcplisten <same args>
in another.
일반적인 실패 원인은 random.py와 tkinter.py처럼, 표준 라이브러리 모듈과 이름이 같은 사용자가 작성한 파일입니다. 이러한 파일이 실행하려는 파일과 같은 디렉터리에 있을 때, IDLE은 표준 라이브러리 파일을 임포트 할 수 없습니다. 현재 수선법은 사용자 파일의 이름을 바꾸는 것입니다.
앞엣것보다 덜 흔하지만, 바이러스 백신이나 방화벽 프로그램이 연결을 중지할 수 있습니다. 프로그램이 연결을 허용하도록 지시할 수 없으면, IDLE이 작동하도록 프로그램을 꺼야 합니다. 외부 포트에 데이터가 노출되지 않기 때문에 이 내부 연결을 허용하는 것은 안전합니다. 비슷한 문제는 연결을 차단하는 네트워크 구성 에러입니다.
파이썬 설치 문제로 인해 IDLE이 중지되는 경우가 있습니다: 여러 버전이 충돌하거나 단일 설치에 관리자 액세스가 필요할 수 있습니다. 충돌을 제거하거나, 관리자 권한으로 실행할 수 없거나 그러고 싶지 않으면 파이썬을 완전히 제거하고 다시 시작하기가 가장 쉽습니다.
좀비 pythonw.exe 프로세스가 문제일 수 있습니다. 윈도우에서는, 작업 관리자를 사용하여 확인하고 있다면 중지하십시오. 때때로 프로그램 충돌이나 키보드 인터럽트(control-C)에 의해 시작된 재시작이 연결에 실패할 수 있습니다. 에러 상자를 닫거나 Shell 메뉴에서 Restart Shell을 사용하면 일시적인 문제를 해결할 수 있습니다.
IDLE이 처음 시작되면, ~/.idlerc/
에서 사용자 구성 파일을 읽으려고 시도합니다 (~는 사용자의 홈 디렉터리입니다). 문제가 있으면, 에러 메시지가 표시되어야 합니다. 임의의 디스크 결함은 예외로 할 때, 파일을 절대 직접 편집하지 않으면 이를 방지할 수 있습니다. 대신, Options의 구성 대화 상자를 사용하십시오. 일단 사용자 구성 파일에 에러가 발생하면, 이를 삭제하고 설정 대화 상자에서 다시 시작하는 것이 가장 좋습니다.
IDLE이 메시지 없이 종료되고, 콘솔에서 시작되지 않았으면, 콘솔이나 터미널에서 시작하고 (python -m idlelib
) 에러 메시지가 나타나는지 확인하십시오.
On Unix-based systems with tcl/tk older than 8.6.11
(see
About IDLE
) certain characters of certain fonts can cause
a tk failure with a message to the terminal. This can happen either
if one starts IDLE to edit a file with such a character or later
when entering such a character. If one cannot upgrade tcl/tk,
then re-configure IDLE to use a font that works better.
사용자 코드 실행하기¶
With rare exceptions, the result of executing Python code with IDLE is
intended to be the same as executing the same code by the default method,
directly with Python in a text-mode system console or terminal window.
However, the different interface and operation occasionally affect
visible results. For instance, sys.modules
starts with more entries,
and threading.active_count()
returns 2 instead of 1.
기본적으로, IDLE은 셸과 편집기를 실행하는 사용자 인터페이스 프로세스가 아닌 별도의 OS 프로세스에서 사용자 코드를 실행합니다. 실행 프로세스에서, sys.stdin
, sys.stdout
및 sys.stderr
를 셸 창에서 입력을 받고 셸 창으로 출력을 보내는 객체로 바꿉니다. sys.__stdin__
, sys.__stdout__
및 sys.__stderr__
에 저장된 원래 값은 건드리지 않지만, None
일 수 있습니다.
Sending print output from one process to a text widget in another is
slower than printing to a system terminal in the same process.
This has the most effect when printing multiple arguments, as the string
for each argument, each separator, the newline are sent separately.
For development, this is usually not a problem, but if one wants to
print faster in IDLE, format and join together everything one wants
displayed together and then print a single string. Both format strings
and str.join()
can help combine fields and lines.
IDLE의 표준 스트림 대체는 (사용자 코드 직접 하거나 multiprocessing과 같은 모듈로) 실행 프로세스에서 만들어진 서브 프로세스에 의해 상속되지 않습니다. 이러한 서브 프로세스가 sys.stdin에서 input
을 사용하거나 sys.stdout이나 sys.stderr로 print
나 write
를 사용하면, 명령 줄 창에서 IDLE을 시작해야 합니다. 그러면 이차 서브 프로세스가 입력과 출력을 위해 해당 창에 연결될 겁니다.
importlib.reload(sys)
와 같은 사용자 코드에 의해 sys
가 재설정되면, IDLE의 변경 사항이 손실되고 키보드로부터의 입력과 화면으로의 출력이 올바르게 동작하지 않게 됩니다.
셸에 포커스가 있으면, 키보드와 화면을 제어합니다. 이것은 일반적으로 투명하지만, 키보드와 화면에 직접 액세스하는 함수는 작동하지 않습니다. 여기에는 키를 눌렀는지를 판단하는 시스템 특정 함수가 포함됩니다.
실행 프로세스에서 실행 중인 IDLE 코드는 그렇지 않다면 없을 프레임을 호출 스택에 추가합니다. IDLE은 sys.getrecursionlimit
와 sys.setrecursionlimit
를 래핑하여 추가 스택 프레임의 영향을 줄입니다.
사용자 코드가 직접 또는 sys.exit를 호출하여 SystemExit를 발생시키면, IDLE은 종료하는 대신 셸 프롬프트로 돌아갑니다.
셸의 사용자 출력¶
프로그램이 텍스트를 출력할 때, 결과는 해당 출력 장치에 의해 결정됩니다. IDLE이 사용자 코드를 실행할 때, sys.stdout
과 sys.stderr
이 IDLE 셸의 표시 영역에 연결됩니다. 그 기능 중 일부는 하부 Tk Text 위젯에서 상속됩니다. 다른 것은 프로그래밍한 추가 사항입니다. (중요하다면) 셸은 상용 실행보다는 개발용으로 설계되었습니다.
예를 들어, 셸은 절대로 출력을 버리지 않습니다. 셸에 무제한 출력을 보내는 프로그램은 결국 메모리를 채워서, 메모리 에러를 일으킵니다. 반대로, 일부 시스템 텍스트 창은 마지막 n 줄의 출력만 유지합니다. 예를 들어, 윈도우 콘솔은 사용자가 설정하면 최대 9999줄을 유지할 수 있으며, 기본값은 300입니다.
Tk Text 위젯, 따라서 IDLE의 셸은 유니코드의 BMP (Basic Multilingual Plane) 부분 집합에서 문자(코드 포인트)를 표시합니다. 어떤 문자가 적절한 글리프로 표시될지와 어떤 문자가 대체 상자로 표시될지는 운영 체제와 설치된 글꼴에 따라 다릅니다. 탭 문자는 뒤따르는 문자가 다음 탭 정지 뒤에서 시작되도록 합니다. (탭 정지는 8 ‘문자’마다 나타납니다). 줄 바꿈 문자는 뒤따르는 텍스트가 새 줄에 나타나게 합니다. 다른 제어 문자는 운영 체제와 글꼴에 따라 무시되거나 스페이스, 상자 또는 그 밖의 것으로 표시됩니다. (화살표 키를 사용하여 이러한 출력에서 텍스트 커서를 움직이면 예상치 못한 간격 동작이 나타날 수 있습니다.)
>>> s = 'a\tb\a<\x02><\r>\bc\nd' # Enter 22 chars.
>>> len(s)
14
>>> s # Display repr(s)
'a\tb\x07<\x02><\r>\x08c\nd'
>>> print(s, end='') # Display s as is.
# Result varies by OS and font. Try it.
repr
함수는 표현식 값의 대화 형 에코에 사용됩니다. 입력 문자열의 변경된 버전을 반환하는데, 제어 코드, 일부 BMP 코드 포인트 및 모든 BMP 이외의 코드 포인트가 이스케이프 코드로 대체됩니다. 위에서 예시했듯이, 어떻게 표시되는지와 관계없이 문자열의 문자를 식별할 수 있도록 합니다.
정상과 에러 출력은 일반적으로 코드 입력 및 서로와 분리되어 별도의 줄에 유지됩니다. 그들은 각각 다른 강조 색상을 얻습니다.
SyntaxError 트레이스백의 경우, 에러가 감지된 곳의 일반적인 ‘^’ 표시는 에러 강조로 텍스트를 색칠하는 것으로 대체됩니다. 파일에서 실행한 코드가 다른 예외를 발생시킬 때, 트레이스백 줄을 마우스 오른쪽 단추로 클릭하여 IDLE 편집기의 해당 줄로 이동할 수 있습니다. 필요하면 파일이 열립니다.
셸에는 출력 라인을 ‘Squeezed text’ 레이블로 압착하는 특수 기능이 있습니다. 이것은 N 줄을 넘어가는 출력에 대해 자동으로 수행됩니다 (기본적으로 N = 50). Settings 대화 상자의 General 페이지의 PyShell 섹션에서 N을 변경할 수 있습니다. 출력을 마우스 오른쪽 버튼으로 클릭하면 더 적은 줄의 출력을 압착할 수 있습니다. 이것은 스크롤 속도를 늦출 수 있을 정도로 긴 줄에 유용할 수 있습니다.
압착된 출력은 레이블을 더블 클릭하여 제자리에서 펼쳐집니다. 레이블을 마우스 오른쪽 버튼으로 클릭하여 클립 보드나 별도의 보기 창으로 보낼 수도 있습니다.
tkinter 응용 프로그램 개발하기¶
IDLE은 tkinter 프로그램 개발을 용이하게 하기 위해 표준 파이썬과 의도적으로 다릅니다. 표준 파이썬에서 import tkinter as tk; root = tk.Tk()
를 입력하면 아무것도 나타나지 않습니다. IDLE에 동일하게 입력하면 tk 창이 나타납니다. 표준 파이썬에서는, 창을 보려면 root.update()
도 입력해야 합니다. IDLE은 초당 약 20회, 대략 50밀리초마다, 백그라운드에서 동등한 일을 합니다. 그런 다음 b = tk.Button(root, text='button'); b.pack()
을 입력하십시오. 마찬가지로, 표준 파이썬에서는 root.update()
를 입력할 때까지 아무것도 시각적으로 변경되지 않습니다.
대부분의 tkinter 프로그램은 root.mainloop()
를 실행하는데, 일반적으로 tk 앱이 파괴될 때까지 반환되지 않습니다. 프로그램이 python -i
이나 IDLE 편집기에서 실행되면, mainloop()
가 반환할 때까지 (상호 작용할 것이 남아있지 않을 때까지) >>>
셸 프롬프트가 나타나지 않습니다.
IDLE 편집기에서 tkinter 프로그램을 실행할 때, mainloop 호출을 주석 처리할 수 있습니다. 그러면 즉시 셸 프롬프트를 얻고 라이브 응용 프로그램과 상호 작용할 수 있습니다. 표준 파이썬에서 실행할 때 mainloop 호출을 다시 활성화해야 한다는 것을 기억해야 합니다.
서브 프로세스 없이 실행하기¶
기본적으로, IDLE은 내부 루프 백 인터페이스를 사용하는 소켓을 통해 별도의 서브 프로세스에서 사용자 코드를 실행합니다. 이 연결은 외부에서 볼 수 없으며 인터넷으로 데이터를 보내거나 받지 않습니다. 방화벽 소프트웨어가 어쨌든 불평하면, 무시할 수 있습니다.
소켓 연결 시도가 실패하면, Idle은 여러분에게 알립니다. 이러한 장애는 때때로 일시적이지만, 지속한다면, 문제는 방화벽이 연결을 차단하거나 특정 시스템의 구성이 잘못되었을 수 있습니다. 문제가 해결될 때까지, -n 명령 줄 스위치를 사용하여 Idle을 실행할 수 있습니다.
IDLE이 -n 명령 줄 스위치로 시작되면 단일 프로세스에서 실행되며 RPC 파이썬 실행 서버를 실행하는 서브 프로세스를 만들지 않습니다. 파이썬이 플랫폼에서 서브 프로세스나 RPC 소켓 인터페이스를 만들 수 없을 때 유용할 수 있습니다. 그러나, 이 모드에서 사용자 코드는 IDLE 자체와 분리되지 않습니다. 또한, Run/Run Module (F5) 가 선택될 때 환경이 다시 시작되지 않습니다. 코드가 수정되면, 변경 사항을 적용하려면 영향을 받는 모듈을 reload()하고 특정 항목을 다시 임포트 해야 합니다 (예를 들어 from foo import baz). 이러한 이유로, 가능하다면 기본 서브 프로세스로 IDLE을 실행하는 것이 좋습니다.
버전 3.4부터 폐지.
도움말과 환경 설정¶
도움말 소스¶
Help 메뉴 항목 “IDLE Help”는 라이브러리 레퍼런스의 IDLE 장의 포맷된 html 버전을 표시합니다. 읽기 전용 tkinter 텍스트 창에 표시되는 결과는 웹 브라우저에서 보는 것과 비슷합니다. 마우스 휠, 스크롤 바 또는 위/아래 화살표 키를 누른 상태로 텍스트를 탐색하십시오. 또는 TOC(목차) 단추를 클릭하고 열린 상자에서 섹션 머리글을 선택하십시오.
Help 메뉴 항목 “Python Docs”는 docs.python.org/x.y
에 있는 자습서를 포함하여 광범위한 도움말 소스를 엽니다, 여기서 ‘x.y’는 현재 실행 중인 파이썬 버전입니다. 시스템에 문서의 오프라인 사본이 있으면 (설치 옵션일 수 있습니다), 대신 열립니다.
IDLE 구성 대화 상자의 General 탭을 사용하여 언제든지 도움말 메뉴에서 선택한 URL을 추가하거나 제거할 수 있습니다.
환경 설정¶
글꼴 설정, 강조 표시, 키 및 일반 설정은 Option 메뉴의 IDLE 구성을 통해 변경할 수 있습니다. 기본이 아닌 사용자 설정은 사용자 홈 디렉터리의 .idlerc
디렉터리에 저장됩니다. 잘못된 사용자 구성 파일로 인한 문제점은 .idlerc
에서 하나 이상의 파일을 편집하거나 삭제하여 해결됩니다.
Font 탭에서, 여러 언어로 된 여러 문자의 서체와 크기 효과에 대한 텍스트 샘플을 참조하십시오. 개인적으로 관심 있는 다른 문자를 추가하려면 샘플을 편집하십시오. 샘플을 사용하여 고정 폭 글꼴을 선택하십시오. 셸이나 편집기에서 특정 문자에 문제가 있으면, 샘플 상단에 해당 문자를 추가하고 먼저 크기를 변경한 다음 글꼴을 변경해보십시오.
Highlights와 Keys 탭에서, 내장이나 사용자 정의 색상 테마와 키 집합을 선택하십시오. 이전 IDLE로 최신 내장 색상 테마나 키 집합을 사용하려면, 새 사용자 정의 색상 테마나 키 집합으로 저장하십시오, 그러면 이전 IDLE에서 쉽게 액세스 할 수 있습니다.
macOS의 IDLE¶
시스템 환경설정: Dock에서, “문서를 열 때 탭 사용”을 “항상”으로 설정할 수 있습니다. 이 설정은 IDLE에서 사용하는 tk/tkinter GUI 프레임 워크와 호환되지 않으며, 몇 가지 IDLE 기능을 훼손합니다.
확장¶
IDLE에는 확장 기능이 포함되어 있습니다. 설정 대화 상자의 Extensions 탭에서 확장에 대한 설정을 변경할 수 있습니다. 자세한 정보는 idlelib 디렉터리에 있는 config-extensions.def의 시작 부분을 참조하십시오. 현재 기본 확장은 zzdummy 뿐이며, 테스트에도 사용되는 예입니다.