IDLE — редактор и оболочка Python
Исходный код: Lib/idlelib/
IDLE — это интегрированная среда разработки и обучения Python.
IDLE обладает следующими возможностями:
- кроссплатформенность: работает практически одинаково в Windows, Unix и macOS
- окно оболочки Python (интерактивный интерпретатор) с подсветкой вводимого кода, вывода и сообщений об ошибках
- многооконный текстовый редактор с несколькими уровнями отмены, подсветкой кода Python, интеллектуальными отступами, подсказками вызовов, автодополнением и другими возможностями
- поиск в любом окне, замена в окнах редактора и поиск в нескольких файлах (grep)
- отладчик с постоянными точками останова, пошаговым выполнением и просмотром глобальных и локальных пространств имён
- настройки, браузеры и другие диалоговые окна
Запуск и выполнение кода
При запуске с параметром -s IDLE выполнит файл, на который указывают переменные среды IDLESTARTUP или PYTHONSTARTUP. Сначала IDLE проверяет IDLESTARTUP; если присутствует IDLESTARTUP, выполняется указанный файл. Если отсутствует IDLESTARTUP, IDLE проверяет PYTHONSTARTUP. Файлы, на которые указывают эти переменные среды, удобно использовать для хранения функций, часто применяемых из оболочки IDLE, или для выполнения операторов import, импортирующих распространённые модули.
Кроме того, Tk также загружает файл запуска, если он существует. Обратите внимание: файл Tk загружается безусловно. Этот дополнительный файл — .Idle.py — ищется в домашнем каталоге пользователя. Операторы в этом файле выполняются в пространстве имён Tk, поэтому этот файл не подходит для импорта функций, которые будут использоваться из оболочки Python в IDLE.
Использование командной строки
IDLE можно запустить из командной строки с различными параметрами. Общий синтаксис:
python -m idlelib [options] [file ...]
Доступны следующие параметры:
-
-c <command> -
Выполнить указанную команду Python в окне оболочки. Например, передайте
-c "print('Hello, World!')". В Windows внешние кавычки должны быть двойными, как показано.
-
-d -
Включить отладчик и открыть окно оболочки.
-
-e -
Открыть окно редактора.
-
-h -
Вывести справочное сообщение с допустимыми сочетаниями параметров и завершить работу.
-
-i -
Открыть окно оболочки.
-
-r <file> -
Выполнить указанный файл в окне оболочки.
-
-s -
Выполнить файл запуска (указанный переменными среды
IDLESTARTUPилиPYTHONSTARTUP) перед открытием окна оболочки.
-
-t <title> -
Задать заголовок окна оболочки.
-
- -
Прочитать и выполнить стандартный ввод в окне оболочки. Этот параметр должен быть последним перед любыми аргументами.
Если указаны аргументы:
- Если используется
-,-cили-r, все аргументы помещаются вsys.argv[1:], аsys.argv[0]устанавливается в'','-c'или'-r'соответственно. Окно редактора не открывается, даже если это поведение по умолчанию, заданное в диалоговом окне Параметры. - В противном случае аргументы считаются файлами, которые нужно открыть для редактирования, а
sys.argvотражает аргументы, переданные непосредственно IDLE.
Сбой при запуске
IDLE использует сокет для связи между процессом графического интерфейса IDLE и процессом выполнения пользовательского кода. Соединение необходимо устанавливать при каждом запуске или перезапуске оболочки. (Перезапуск обозначается разделительной линией с надписью «ПЕРЕЗАПУСК».) Если пользовательскому процессу не удаётся подключиться к процессу графического интерфейса, обычно отображается окно ошибки Tk с сообщением «не удаётся подключиться», которое направляет пользователя сюда. Затем процесс завершает работу.
Одна из конкретных причин сбоя соединения в Unix-системах — неправильно настроенные правила маскарадинга в сетевых параметрах системы. При запуске IDLE из терминала будет выведено сообщение, начинающееся с ** Invalid host:. Допустимое значение — 127.0.0.1 (idlelib.rpc.LOCALHOST). Диагностировать проблему можно, выполнив tcpconnect -irv 127.0.0.1 6543 в одном окне терминала и tcplisten <same args> в другом.
Распространённая причина сбоя — созданный пользователем файл с тем же именем, что и у модуля стандартной библиотеки, например random.py или tkinter.py. Если такой файл находится в том же каталоге, что и запускаемый файл, IDLE не может импортировать файл из стандартной библиотеки. В настоящее время проблему можно решить, переименовав пользовательский файл.
Хотя теперь это случается реже, чем раньше, антивирусная программа или брандмауэр могут блокировать соединение. Если программу нельзя настроить на разрешение соединения, её придётся отключить, чтобы IDLE работала. Разрешить это внутреннее соединение безопасно, поскольку на внешних портах данные не видны. Аналогичную проблему может вызвать неправильная настройка сети, блокирующая соединения.
Иногда работе IDLE мешают проблемы с установкой Python: могут конфликтовать несколько версий или для единственной установленной версии может требоваться доступ администратора. Если устранить конфликт невозможно или запускать программу от имени администратора нельзя либо не хочется, проще всего полностью удалить Python и начать заново.
Проблему может вызвать зависший процесс pythonw.exe. В Windows проверьте это в диспетчере задач и завершите его, если он есть. Иногда перезапуск, вызванный аварийным завершением программы или прерыванием с клавиатуры (control-C), не может установить соединение. Закрытие окна ошибки или выбор пункта «Перезапустить оболочку» в меню «Оболочка» может устранить временную проблему.
При первом запуске IDLE пытается прочитать пользовательские файлы конфигурации в ~/.idlerc/ (~ — это домашний каталог пользователя). При возникновении проблемы должно отобразиться сообщение об ошибке. Если не считать случайных сбоев диска, таких проблем можно избежать, не редактируя файлы вручную. Вместо этого используйте диалоговое окно настройки в меню «Параметры». Если в пользовательском файле конфигурации уже возникла ошибка, лучшим решением может быть удалить его и заново задать параметры в диалоговом окне настроек.
Если IDLE завершает работу без сообщения и была запущена не из консоли, попробуйте запустить её из консоли или терминала (python -m idlelib) и проверьте, появится ли сообщение об ошибке.
В системах на базе Unix с tcl/tk версии ниже 8.6.11 (см. About IDLE) некоторые символы в некоторых шрифтах могут вызывать сбой tk с сообщением в терминале. Это может произойти как при запуске IDLE для редактирования файла с таким символом, так и позднее, при вводе такого символа. Если обновить tcl/tk невозможно, перенастройте IDLE на использование более подходящего шрифта.
Выполнение пользовательского кода
За редкими исключениями, результат выполнения кода Python в IDLE должен совпадать с результатом выполнения того же кода стандартным способом — непосредственно в Python в текстовой системной консоли или окне терминала. Однако различия в интерфейсе и работе иногда влияют на видимые результаты. Например, sys.modules содержит больше элементов, а threading.active_count() возвращает 2 вместо 1.
По умолчанию IDLE запускает пользовательский код в отдельном процессе ОС, а не в процессе пользовательского интерфейса, в котором работают оболочка и редактор. В процессе выполнения она заменяет sys.stdin, sys.stdout и sys.stderr объектами, которые получают ввод из окна оболочки и отправляют туда вывод. Исходные значения, хранящиеся в sys.__stdin__, sys.__stdout__ и sys.__stderr__, не изменяются, но могут быть None.
Отправка вывода print из одного процесса в текстовый виджет другого медленнее, чем вывод в системный терминал в том же процессе. Особенно заметна разница при выводе нескольких аргументов, поскольку строка для каждого аргумента, каждый разделитель и символ новой строки отправляются отдельно. При разработке это обычно не проблема, но если требуется ускорить вывод в IDLE, сформируйте и объедините всё, что нужно вывести вместе, а затем выведите одну строку. Для объединения полей и строк могут помочь как форматирующие строки, так и str.join().
Стандартные потоки IDLE не наследуются дочерними процессами, созданными в процессе выполнения, независимо от того, запускаются ли они непосредственно пользовательским кодом или такими модулями, как multiprocessing. Если такой дочерний процесс использует input из sys.stdin или print либо write для sys.stdout или sys.stderr, IDLE следует запускать в окне командной строки. (В Windows используйте python или py вместо pythonw или pyw.) Тогда дочерний процесс будет подключён к этому окну для ввода и вывода.
Если пользовательский код сбросит sys, например с помощью importlib.reload(sys), изменения IDLE будут потеряны, и ввод с клавиатуры и вывод на экран перестанут работать правильно.
Когда оболочка находится в фокусе, она управляет клавиатурой и экраном. Обычно это незаметно, однако функции, напрямую обращающиеся к клавиатуре и экрану, работать не будут. К ним относятся системно-зависимые функции, определяющие, была ли нажата клавиша, и, если да, какая именно.
Код IDLE, выполняющийся в процессе выполнения, добавляет в стек вызовов кадры, которых в противном случае там не было бы. IDLE оборачивает sys.getrecursionlimit и sys.setrecursionlimit, чтобы уменьшить влияние дополнительных кадров стека.
Если пользовательский код вызывает SystemExit напрямую или через sys.exit, IDLE возвращается к приглашению оболочки, а не завершает работу.
Пользовательский вывод в оболочке
Результат вывода текста программой зависит от соответствующего устройства вывода. Когда IDLE выполняет пользовательский код, sys.stdout и sys.stderr связаны с областью отображения оболочки IDLE. Некоторые её возможности унаследованы от базового текстового виджета Tk. Другие добавлены программно. Когда это имеет значение, оболочка рассчитана на разработку, а не на рабочий запуск программ.
Например, оболочка никогда не отбрасывает вывод. Программа, отправляющая в неё неограниченный объём данных, со временем заполнит память и вызовет ошибку памяти. В отличие от этого, некоторые системные текстовые окна сохраняют только последние n строк вывода. Например, консоль Windows сохраняет от 1 до 9999 строк — это значение задаёт пользователь, а по умолчанию оно равно 300.
Текстовый виджет Tk, а значит и оболочка IDLE, отображает символы (кодовые точки) из подмножества BMP (основной многоязычной плоскости) Юникода. То, какие символы отображаются корректным глифом, а какие — замещающим прямоугольником, зависит от операционной системы и установленных шрифтов. Символы табуляции заставляют следующий текст начинаться после ближайшей позиции табуляции. (Такие позиции расположены через каждые 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 заменены escape-кодами. Как показано выше, это позволяет определить символы в строке независимо от того, как они отображаются.
Обычный вывод и вывод ошибок обычно отделяются (помещаются на отдельные строки) от ввода кода и друг от друга. Для каждого из них используются разные цвета подсветки.
В трассировках SyntaxError обычный символ «^», указывающий место обнаружения ошибки, заменяется подсветкой текста цветом ошибки. Если код, запущенный из файла, вызывает другие исключения, можно щёлкнуть правой кнопкой мыши по строке трассировки, чтобы перейти к соответствующей строке в редакторе IDLE. При необходимости файл будет открыт.
В оболочке есть специальная возможность сворачивать строки вывода в метку «Свёрнутый текст». Это делается автоматически, если вывод содержит больше N строк (по умолчанию N = 50). Значение N можно изменить в разделе PyShell на странице General диалогового окна Settings. Вывод с меньшим числом строк можно свернуть, щёлкнув по нему правой кнопкой мыши. Это может быть полезно для длинных строк, замедляющих прокрутку.
Свёрнутый вывод раскрывается на месте двойным щелчком по метке. Также его можно отправить в буфер обмена или открыть в отдельном окне просмотра, щёлкнув по метке правой кнопкой мыши.
Разработка приложений tkinter
IDLE намеренно отличается от стандартного Python, чтобы упростить разработку программ tkinter. Введите import tkinter as tk;
root = tk.Tk() в стандартном Python — и ничего не произойдёт. Введите то же самое в IDLE — и появится окно tk. В стандартном Python для отображения окна нужно также ввести root.update(). IDLE выполняет эквивалентные действия в фоновом режиме примерно 20 раз в секунду, то есть каждые 50 миллисекунд. Затем введите b = tk.Button(root, text='button'); b.pack(). В стандартном Python снова ничего не изменится на экране, пока не будет введено root.update().
Большинство программ tkinter запускает root.mainloop(), который обычно не возвращает управление, пока приложение tk не будет уничтожено. Если программа запущена с помощью python -i или из редактора IDLE, приглашение оболочки >>> не появится, пока не вернётся mainloop(); к этому времени взаимодействовать будет уже не с чем.
При запуске программы tkinter из редактора IDLE можно закомментировать вызов mainloop. Тогда приглашение оболочки появится сразу, и можно будет взаимодействовать с работающим приложением. Нужно лишь не забыть снова включить вызов mainloop при запуске в стандартном Python.
Запуск без дочернего процесса
По умолчанию IDLE выполняет пользовательский код в отдельном дочернем процессе через сокет, использующий внутренний интерфейс обратной петли. Это соединение не видно извне, и данные не отправляются в интернет и не принимаются из него. Если программа брандмауэра всё же выдаёт предупреждение, его можно проигнорировать.
Если установить соединение через сокет не удаётся, Idle уведомит вас об этом. Иногда такие сбои носят временный характер, но если они не прекращаются, причиной может быть блокировка соединения брандмауэром или неправильная настройка системы. Пока проблема не устранена, Idle можно запускать с параметром командной строки -n.
Если IDLE запущена с параметром командной строки -n, она будет работать в одном процессе и не создаст дочерний процесс, выполняющий сервер выполнения Python RPC. Это может быть полезно, если Python не удаётся создать дочерний процесс или интерфейс сокета RPC на вашей платформе. Однако в этом режиме пользовательский код не изолирован от самой IDLE. Кроме того, среда не перезапускается при выборе команды Run/Run Module (F5). Если код был изменён, необходимо вызвать reload() для затронутых модулей и повторно импортировать отдельные элементы (например, from foo import baz), чтобы изменения вступили в силу. По этим причинам, если это возможно, предпочтительно запускать IDLE с дочерним процессом, используемым по умолчанию.
Устарело начиная с версии 3.4.
Справка и настройки
Источники справки
Пункт меню справки «Справка по IDLE» отображает отформатированную версию главы об IDLE из справочника библиотеки в формате HTML. Результат показывается в доступном только для чтения текстовом окне tkinter и напоминает отображение в веб-браузере. Перемещайтесь по тексту с помощью колёсика мыши, полосы прокрутки или клавиш со стрелками вверх и вниз. Либо нажмите кнопку TOC (оглавление) и выберите заголовок раздела в открывшемся окне.
Пункт меню справки «Документация Python» открывает обширные справочные материалы, включая учебные пособия, доступные по адресу docs.python.org/x.y, где «x.y» — версия Python, запущенная в данный момент. Если в системе есть автономная копия документации (это может быть параметром установки), вместо неё откроется эта копия.
Выбранные URL-адреса можно в любой момент добавить в меню справки или удалить из него на вкладке General диалогового окна Configure IDLE.
Настройка параметров
Параметры шрифтов, подсветки, клавиш и общие параметры можно изменить с помощью пункта Configure IDLE в меню Option. Пользовательские настройки, отличающиеся от стандартных, сохраняются в каталоге .idlerc в домашнем каталоге пользователя. Проблемы, вызванные некорректными пользовательскими файлами конфигурации, устраняются редактированием или удалением одного или нескольких файлов в .idlerc.
На вкладке Font изучите образец текста, чтобы увидеть, как гарнитура и размер шрифта влияют на отображение разных символов на разных языках. Измените образец, добавив другие интересующие вас символы. Используйте образец для выбора моноширинных шрифтов. Если с некоторыми символами возникают проблемы в оболочке или редакторе, добавьте их в начало образца и попробуйте сначала изменить размер, а затем шрифт.
На вкладке Highlights and Keys выберите встроенную или пользовательскую цветовую тему и набор клавиш. Чтобы использовать более новую встроенную цветовую тему или набор клавиш в старых версиях IDLE, сохраните их как новую пользовательскую тему или набор клавиш — тогда они будут доступны и в старых версиях IDLE.
IDLE в macOS
В разделе «Системные настройки: Dock» можно установить для параметра «Предпочитать вкладки при открытии документов» значение «Всегда». Этот параметр несовместим с графическим интерфейсом tk/tkinter, используемым IDLE, и нарушает работу некоторых её функций.
Расширения
В IDLE предусмотрена поддержка расширений. Настройки расширений можно изменить на вкладке Extensions диалогового окна настроек. Дополнительную информацию см. в начале файла config-extensions.def в каталоге idlelib. Единственное расширение, включённое по умолчанию в текущей версии, — zzdummy; это пример, который также используется для тестирования.
idlelib — реализация приложения IDLE
Исходный код: Lib/idlelib
Пакет Lib/idlelib реализует приложение IDLE. Информацию об использовании IDLE см. в остальных разделах этой страницы.
Описание файлов в idlelib приведено в idlelib/README.txt. Откройте его в каталоге idlelib или выберите пункт Help => About IDLE в меню IDLE. В этом файле также сопоставлены пункты меню IDLE с кодом, который их реализует. За исключением файлов, перечисленных в разделе «Startup», код idlelib является «внутренним» в том смысле, что изменения функций можно переносить в предыдущие версии (см. PEP 434).
© 2001–2025 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.13/library/idle.html