IDLE — редактор и оболочка Python
Исходный код: Lib/idlelib/
IDLE — это интегрированная среда разработки и обучения Python.
IDLE обладает следующими возможностями:
- кроссплатформенность: работает примерно одинаково в Windows, Unix и macOS
- окно оболочки Python (интерактивный интерпретатор) с подсветкой вводимого кода, вывода и сообщений об ошибках
- многооконный текстовый редактор с многократной отменой действий, подсветкой синтаксиса Python, умными отступами, подсказками вызовов, автодополнением и другими возможностями
- поиск в любом окне, замена в окнах редактора и поиск по нескольким файлам (grep)
- отладчик с сохраняемыми точками останова, пошаговым выполнением и просмотром глобальных и локальных пространств имён
- настройки, обозреватели и другие диалоговые окна
Приложение IDLE реализовано в пакете idlelib.
Это необязательный модуль. Если он отсутствует в вашей копии CPython, обратитесь к документации поставщика (то есть того, кто предоставил вам Python). Если вы являетесь поставщиком, см. раздел Требования к необязательным модулям.
Запуск и выполнение кода
При запуске с параметром -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 и процессом выполнения пользовательского кода. Подключение должно устанавливаться каждый раз при запуске или перезапуске оболочки. (На перезапуск указывает разделительная линия с надписью «RESTART».) Если пользовательскому процессу не удаётся подключиться к процессу графического интерфейса, обычно отображается окно ошибки Tk с сообщением «cannot connect» («не удаётся подключиться»), которое направляет пользователя сюда. После этого процесс завершает работу.
Одна из конкретных причин сбоя подключения в системах 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) перезапуск не удаётся выполнить. Закрытие окна ошибки или выбор пункта Restart Shell в меню Shell может устранить временную проблему.
При первом запуске IDLE пытается прочитать пользовательские файлы конфигурации из ~/.idlerc/ (символ ~ обозначает домашний каталог пользователя). Если возникнет проблема, должно отобразиться сообщение об ошибке. Если не считать случайных сбоев диска, этого можно избежать, никогда не редактируя файлы вручную. Вместо этого используйте диалоговое окно настройки в меню Options. Если в пользовательском файле конфигурации уже есть ошибка, лучшим решением может быть удалить его и начать настройку заново с помощью диалогового окна.
Если 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 (основной многоязычной плоскости) Unicode. От операционной системы и установленных шрифтов зависит, какие символы будут отображаться корректным глифом, а какие — замещающим прямоугольником. Символы табуляции сдвигают следующий текст к следующей позиции табуляции. (Такие позиции встречаются через каждые 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. При необходимости файл будет открыт.
В оболочке есть специальная функция сворачивания строк вывода в метку «Squeezed text». Это делается автоматически, если вывод содержит больше 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.
Справка и настройки
Источники справки
Пункт меню Help “IDLE Help” отображает отформатированную HTML-версию главы об IDLE из справочника библиотеки. Результат, показанный в текстовом окне tkinter только для чтения, почти не отличается от того, что можно увидеть в веб-браузере. Перемещайтесь по тексту с помощью колеса мыши, полосы прокрутки или клавиш со стрелками вверх и вниз. Либо нажмите кнопку TOC (оглавление) и выберите заголовок раздела в открывшемся окне.
Пункт меню Help “Python Docs” открывает обширные источники справки, включая учебные руководства, доступные по адресу 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
В разделе System Preferences: Dock можно установить для параметра “Prefer tabs when opening documents” значение “Always”. Эта настройка несовместима с графическим интерфейсом 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 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.14/library/idle.html