Документация Python неофициальный перевод
Содержание страницы

IDLE

Исходный код: Lib/idlelib/


IDLE – это интегрированная среда разработки и обучения Python.

IDLE имеет следующие возможности:

  • написан на 100% чистом Python с использованием GUI-тулкита tkinter

  • кроссплатформенность: в основном одинаково работает на Windows, Unix и macOS

  • окно оболочки Python (интерактивный интерпретатор) с цветовой подсветкой вводимого кода, вывода и сообщений об ошибках

  • многооконный текстовый редактор с множественной отменой, подсветкой синтаксиса Python, умными отступами, подсказками вызова, автозавершением и другими функциями

  • поиск в любом окне, замена в окнах редактора и поиск по нескольким файлам (grep)

  • отладчик с постоянными точками останова, пошаговым выполнением и просмотром глобального и локального пространства имён

  • настройки, обозреватели и другие диалоговые окна

Редактирование и навигацияEditing and navigation

Окна редактораEditor windows

IDLE может открывать окна редактора при запуске в зависимости от настроек и способа запуска IDLE. В дальнейшем для этого используется меню «Файл». Для каждого файла может быть открыто только одно окно редактора.

В строке заголовка отображаются имя файла, полный путь, а также версия Python и IDLE, в которой работает окно. В строке состояния отображаются номер строки («Ln») и номер столбца («Col»). Нумерация строк начинается с 1, столбцов – с 0.

IDLE считает, что файлы с известным расширением .py* содержат код Python, а остальные – нет. Код Python запускается через меню «Выполнить».

Сочетания клавишKey bindings

В этом разделе под «C» подразумевается клавиша Control в Windows и Unix и клавиша Command в macOS.

  • Backspace удаляет влево; Del удаляет вправо

  • C-Backspace удаляет слово слева; C-Del удаляет слово справа

  • Клавиши со стрелками и Page Up/Page Down для перемещения

  • C-LeftArrow и C-RightArrow перемещают по словам

  • Home/End переходят в начало/конец строки

  • C-Home/C-End переходят в начало/конец файла

  • Некоторые полезные привязки Emacs унаследованы от Tcl/Tk:

    • C-a начало строки

    • C-e конец строки

    • C-k вырезать строку (но не помещает её в буфер обмена)

    • C-l центрировать окно вокруг точки вставки

    • C-b переместиться на один символ назад без удаления (обычно для этого также можно использовать клавишу со стрелкой)

    • C-f переместиться на один символ вперёд без удаления (обычно для этого также можно использовать клавишу со стрелкой)

    • C-p подняться на одну строку вверх (обычно для этого также можно использовать клавишу со стрелкой)

    • C-d удалить следующий символ

Стандартные сочетания клавиш (например, C-c для копирования и C-v для вставки) могут работать. Сочетания клавиш выбираются в диалоге Configure IDLE.

Автоматический отступAutomatic indentation

После оператора, открывающего блок, следующая строка получает отступ в 4 пробела (в окне Python Shell – одна табуляция). После некоторых ключевых слов (break, return и т.д.) отступ следующей строки уменьшается. В начале строки Backspace удаляет до 4 пробелов, если они есть. Tab вставляет пробелы (в окне Python Shell – одну табуляцию); количество зависит от ширины отступа. В настоящее время из-за ограничений Tcl/Tk табуляция ограничена четырьмя пробелами.

См. также команды увеличения/уменьшения отступа в меню «Формат».

АвтодополнениеCompletions

Автодополнение предоставляется для функций, классов и атрибутов классов – как встроенных, так и определённых пользователем. Автодополнение также предоставляется для имён файлов.

Окно автодополнения (ACW) открывается после заданной задержки (по умолчанию две секунды) после ввода точки ‘.’ или (в строке) os.sep. Если после одного из этих символов (плюс ноль или более других символов) нажать Tab, ACW откроется немедленно при наличии возможного продолжения.

Если для введённых символов существует только одно возможное дополнение, Tab вставит его без открытия ACW.

Команда «Show Completions» принудительно открывает окно дополнений; по умолчанию C-space открывает окно дополнений. В пустой строке оно будет содержать файлы текущего каталога. На пустой строке оно будет содержать встроенные и определённые пользователем функции и классы в текущих пространствах имён, а также импортированные модули. Если введены какие-то символы, ACW попытается уточнить выбор.

Если введена строка символов, выделение в окне автодополнения перейдёт к записи, наиболее соответствующей этим символам. Ввод tab приведёт к вставке самого длинного однозначного совпадения в окно редактора или оболочки. Два tab подряд вставят текущее выделение окна автодополнения, как и Enter или двойной щелчок. Клавиши курсора, Page Up/Down, выбор мышью и колёсико прокрутки работают с окном автодополнения.

«Скрытые» атрибуты можно получить, введя начало скрытого имени после точки ‘.’, например ‘_’. Это позволяет получить доступ к модулям с установленным __all__ или к закрытым атрибутам классов.

Автодополнение и функция «Expand Word» могут сэкономить много ввода!

Автодополнение в настоящее время ограничено именами в пространствах имён. Имена в окне редактора, которые не импортированы через __main__ и sys.modules, не будут найдены. Запустите модуль один раз с вашими импортами, чтобы исправить это. Обратите внимание, что IDLE сама помещает довольно много модулей в sys.modules, поэтому многое может быть найдено по умолчанию, например, модуль re.

Если вам не нравится, что ACW появляется без запроса, просто увеличьте задержку или отключите расширение.

Подсказки вызоваCalltips

Подсказка вызова появляется, когда после имени доступной функции вводится (. Выражение имени может включать точки и индексы. Подсказка остаётся до тех пор, пока по ней не щёлкнут, курсор не выйдет из области аргументов или не будет введён ). Когда курсор находится в части определения с аргументами, меню или сочетание клавиш показывают подсказку.

Подсказка вызова состоит из сигнатуры функции и первой строки строки документации. Для встроенных функций без доступной сигнатуры подсказка состоит из всех строк до пятой строки или первой пустой строки. Эти детали могут измениться.

Набор доступных функций зависит от того, какие модули были импортированы в пользовательский процесс, включая импортированные самой IDLE, и какие определения были выполнены после последнего перезапуска.

Например, перезапустите оболочку и введите itertools.count(. Появится подсказка вызова, потому что IDLE импортирует itertools в пользовательский процесс для своих нужд. (Это может измениться.) Введите turtle.write( – ничего не появится. IDLE не импортирует turtle. Меню и сочетания клавиш тоже ничего не делают. Введите import turtle, и тогда turtle.write( сработает.

В редакторе операторы импорта не действуют до запуска файла. Возможно, стоит запустить файл после написания операторов импорта в начале или сразу запустить существующий файл перед редактированием.

Контекст кодаCode Context

В окне редактора с кодом Python контекст кода можно включить или отключить, чтобы показать или скрыть панель в верхней части окна. При отображении эта панель фиксирует начальные строки блочного кода, например, начинающиеся с ключевых слов class, def или if, которые в противном случае ушли бы за пределы видимости. Размер панели будет расширяться или сжиматься по мере необходимости, чтобы показать все текущие уровни контекста, вплоть до максимального количества строк, заданного в диалоге настройки IDLE (по умолчанию 15). Если текущих строк контекста нет, а функция включена, отображается одна пустая строка. Щелчок по строке на панели контекста перемещает эту строку в верхнюю часть редактора.

Цвета текста и фона для панели контекста можно настроить на вкладке «Подсветка» в диалоге настройки IDLE.

Окно оболочки PythonPython Shell window

В оболочке IDLE можно вводить, редактировать и вызывать целые операторы. Большинство консолей и терминалов работают только с одной физической строкой за раз.

При вставке кода в оболочку он не компилируется и не выполняется, пока не будет нажата Return. Перед выполнением можно отредактировать вставленный код. Если вставить в оболочку несколько операторов, результатом будет SyntaxError, так как несколько операторов компилируются как один.

Описанные в предыдущих разделах возможности редактирования работают при интерактивном вводе кода. Окно IDLE Shell также реагирует на следующие клавиши.

  • C-c прерывает выполняющуюся команду

  • C-d отправляет конец файла; закрывает окно, если введено в приглашении >>>

  • Alt-/ (расширение слова) также полезно для уменьшения объёма ввода

    История команд

    • Alt-p извлекает предыдущую команду, соответствующую введённому тексту. В macOS используйте C-p.

    • Alt-n извлекает следующую. В macOS используйте C-n.

    • Return на любой предыдущей команде извлекает её

Цвета текстаText colors

В IDLE по умолчанию используется чёрный текст на белом фоне, но текст окрашивается в зависимости от смысла. Для Shell это вывод Shell, ошибки Shell, вывод пользователя и ошибки пользователя. Для кода Python, в приглашении Shell или в редакторе, это ключевые слова, имена встроенных классов и функций, имена после class и def, строки и комментарии. Для любого текстового окна это курсор (когда присутствует), найденный текст (когда возможно) и выделенный текст.

Окрашивание текста выполняется в фоновом режиме, поэтому иногда может быть виден неокрашенный текст. Чтобы изменить цветовую схему, используйте вкладку «Подсветка» в диалоге настройки IDLE. Разметка строк точек останова отладчика в редакторе и текст во всплывающих окнах и диалогах не настраивается пользователем.

Запуск и выполнение кодаStartup and code execution

При запуске с опцией -s IDLE выполняет файл, на который ссылаются переменные среды IDLESTARTUP или PYTHONSTARTUP. IDLE сначала проверяет IDLESTARTUP; если IDLESTARTUP присутствует, запускается указанный файл. Если IDLESTARTUP отсутствует, IDLE проверяет PYTHONSTARTUP. Файлы, на которые ссылаются эти переменные среды, удобно использовать для хранения функций, часто используемых из Shell IDLE, или для выполнения операторов импорта общих модулей.

Кроме того, Tk также загружает файл запуска, если он существует. Обратите внимание, что Tk-файл загружается безусловно. Этот дополнительный файл – .Idle.py, он ищется в домашнем каталоге пользователя. Операторы в этом файле будут выполняться в пространстве имён Tk, поэтому этот файл не подходит для импорта функций, используемых из Python Shell IDLE.

Использование командной строкиCommand line usage

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.

Сбой при запускеStartup failure

IDLE использует сокет для связи между процессом графического интерфейса IDLE и процессом выполнения пользовательского кода. Соединение должно устанавливаться при каждом запуске или перезапуске оболочки. (Последнее обозначается разделительной линией с надписью «RESTART».) Если пользовательский процесс не может подключиться к процессу GUI, отображается Tk окно ошибки с сообщением «cannot connect», которое направляет пользователя сюда. Затем процесс завершается.

Частая причина сбоя – файл пользователя с тем же именем, что и модуль стандартной библиотеки, например random.py и tkinter.py. Когда такой файл находится в той же директории, что и файл, который должен быть запущен, IDLE не может импортировать файл из стандартной библиотеки. Текущее решение – переименовать пользовательский файл.

Хотя и реже, чем в прошлом, антивирус или межсетевой экран могут блокировать соединение. Если программу нельзя научить разрешать соединение, её необходимо отключить для работы IDLE. Разрешать это внутреннее соединение безопасно, поскольку никакие данные не видны на внешних портах. Аналогичная проблема – неверная настройка сети, блокирующая соединения.

Проблемы с установкой Python иногда мешают работе IDLE: несколько версий могут конфликтовать, или для одной установки могут потребоваться права администратора. Если конфликт не устранён, или невозможно или нежелательно запускать от имени администратора, проще всего полностью удалить Python и начать заново.

Процесс-зомби pythonw.exe может быть проблемой. В Windows используйте диспетчер задач, чтобы проверить его и остановить, если он есть. Иногда перезапуск, инициированный сбоем программы или прерыванием с клавиатуры (Ctrl+C), может не привести к подключению. Закрытие окна ошибки или использование команды «Перезапустить оболочку» в меню «Оболочка» может исправить временную проблему.

При первом запуске IDLE пытается прочитать пользовательские файлы конфигурации в ~/.idlerc/ (~ – домашний каталог пользователя). Если возникает проблема, должно отображаться сообщение об ошибке. Не считая случайных сбоев диска, этого можно избежать, никогда не редактируя файлы вручную. Вместо этого используйте диалог настройки в меню Options. Если в пользовательском файле конфигурации уже есть ошибка, лучшее решение – удалить его и начать заново с помощью диалога настроек.

Если IDLE завершается без сообщения и не был запущен из консоли, попробуйте запустить его из консоли или терминала (python -m idlelib) и посмотрите, появится ли сообщение об ошибке.

Выполнение пользовательского кодаRunning user code

За редкими исключениями, результат выполнения кода Python в IDLE должен быть таким же, как при выполнении того же кода стандартным способом – напрямую с помощью Python в текстовой системной консоли или окне терминала. Однако различия в интерфейсе и работе иногда влияют на видимые результаты. Например, sys.modules начинается с большим количеством записей, а threading.activeCount() возвращает 2 вместо 1.

По умолчанию IDLE выполняет пользовательский код в отдельном процессе ОС, а не в процессе пользовательского интерфейса, который управляет оболочкой и редактором. В процессе выполнения он заменяет sys.stdin, sys.stdout и sys.stderr объектами, которые получают ввод из окна оболочки и отправляют вывод в него. Исходные значения, хранящиеся в sys.__stdin__, sys.__stdout__ и sys.__stderr__, не изменяются, но могут быть None.

Когда Shell находится в фокусе, он управляет клавиатурой и экраном. Обычно это незаметно, но функции, которые напрямую обращаются к клавиатуре и экрану, работать не будут. К ним относятся системно-зависимые функции, определяющие, была ли нажата клавиша, и если да, то какая.

Замена стандартных потоков IDLE не наследуется подпроцессами, созданными в процессе выполнения, будь то напрямую пользовательским кодом или модулями, такими как multiprocessing. Если такой подпроцесс использует input из sys.stdin или print или write для sys.stdout или sys.stderr, IDLE следует запускать в окне командной строки. Тогда вторичный подпроцесс будет привязан к этому окну для ввода и вывода.

Код IDLE, выполняющийся в процессе выполнения, добавляет фреймы в стек вызовов, которых в противном случае не было бы. IDLE оборачивает sys.getrecursionlimit и sys.setrecursionlimit, чтобы уменьшить влияние дополнительных фреймов стека.

Если sys сбрасывается пользовательским кодом, например, с помощью importlib.reload(sys), изменения IDLE теряются, и ввод с клавиатуры и вывод на экран будут работать неправильно.

Когда пользовательский код вызывает SystemExit напрямую или через sys.exit, IDLE возвращается к приглашению оболочки вместо завершения.

Пользовательский вывод в ShellUser output in Shell

Когда программа выводит текст, результат определяется соответствующим устройством вывода. Когда IDLE выполняет пользовательский код, sys.stdout и sys.stderr подключены к области отображения Shell IDLE. Некоторые его функции унаследованы от базового виджета Tk Text. Другие являются программными дополнениями. Там, где это важно, Shell спроектирован для разработки, а не для эксплуатации в промышленной среде.

Например, Shell никогда не отбрасывает вывод. Программа, которая отправляет неограниченный вывод в Shell, в конечном итоге заполнит память, что приведет к ошибке памяти. Напротив, некоторые системные текстовые окна сохраняют только последние n строк вывода. Например, консоль Windows сохраняет настраиваемые пользователем от 1 до 9999 строк, по умолчанию 300.

Виджет Tk Text, а следовательно и Shell IDLE, отображает символы (кодовые точки) в подмножестве BMP (Basic Multilingual Plane) Unicode. Какие символы отображаются правильным глифом, а какие замещающим прямоугольником, зависит от операционной системы и установленных шрифтов. Символы табуляции заставляют следующий текст начинаться после следующей позиции табуляции. (Они встречаются каждые 8 «символов»). Символы новой строки заставляют следующий текст отображаться на новой строке. Другие управляющие символы игнорируются или отображаются как пробел, прямоугольник или что-то ещё, в зависимости от операционной системы и шрифта. (Перемещение текстового курсора через такой вывод с помощью клавиш со стрелками может проявлять неожиданное поведение в виде пропусков.)

>>> s = 'a\tb\a<\x02><\r>\bc\nd'  # Введите 22 символа.
>>> len(s)
14
>>> s  # Отобразить repr(s)
'a\tb\x07<\x02><\r>\x08c\nd'
>>> print(s, end='')  # Отобразить s как есть.
# Result varies by OS and font.  Try it.

Функция repr используется для интерактивного вывода значений выражений. Она возвращает изменённую версию входной строки, в которой управляющие коды, некоторые кодовые точки BMP и все не-BMP кодовые точки заменяются escape-последовательностями. Как показано выше, это позволяет определить символы в строке независимо от того, как они отображаются.

Обычный вывод и вывод ошибок, как правило, отделены (на отдельных строках) от ввода кода и друг от друга. Они получают разные цвета подсветки.

Для трассировок SyntaxError обычная пометка ‘^’ в месте обнаружения ошибки заменяется выделением текста цветом ошибки. Когда код, запущенный из файла, вызывает другие исключения, можно щелкнуть правой кнопкой мыши по строке трассировки, чтобы перейти к соответствующей строке в редакторе IDLE. Файл будет открыт при необходимости.

В Shell есть специальная возможность сжимать строки вывода до метки «Сжатый текст». Это делается автоматически для вывода, превышающего N строк (по умолчанию N = 50). N можно изменить в разделе PyShell на вкладке General диалога Settings. Вывод с меньшим количеством строк можно сжать, щелкнув по нему правой кнопкой мыши. Это может быть полезно для строк, достаточно длинных, чтобы замедлить прокрутку.

Сжатый вывод разворачивается на месте двойным щелчком по метке. Его также можно отправить в буфер обмена или отдельное окно просмотра, щелкнув правой кнопкой мыши по метке.

Разработка tkinter-приложенийDeveloping tkinter applications

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, приглашение >>> shell не появляется, пока mainloop() не вернётся, после чего уже не с чем взаимодействовать.

При запуске tkinter-программы из редактора IDLE можно закомментировать вызов mainloop. Тогда сразу появляется приглашение shell, и можно взаимодействовать с работающим приложением. Нужно только не забыть снова включить вызов mainloop при запуске в стандартном Python.

Запуск без подпроцессаRunning without a subprocess

По умолчанию IDLE выполняет пользовательский код в отдельном подпроцессе через сокет, использующий внутренний интерфейс loopback. Это соединение не видно извне, и никакие данные не отправляются и не принимаются из Интернета. Если брандмауэр всё равно выдаёт предупреждение, его можно игнорировать.

Если попытка установить сокетное соединение не удаётся, IDLE уведомит вас. Такие сбои иногда носят временный характер, но если они постоянны, проблема может заключаться либо в блокировке соединения брандмауэром, либо в неправильной конфигурации конкретной системы. Пока проблема не решена, можно запускать IDLE с ключом командной строки -n.

Если IDLE запущен с ключом командной строки -n, он будет работать в одном процессе и не будет создавать подпроцесс, запускающий RPC-сервер выполнения Python. Это может быть полезно, если Python не может создать подпроцесс или сокетный интерфейс RPC на вашей платформе. Однако в этом режиме пользовательский код не изолирован от самого IDLE. Кроме того, среда не перезапускается при выборе Run/Run Module (F5). Если ваш код был изменён, необходимо выполнить reload() для затронутых модулей и повторно импортировать любые конкретные элементы (например, from foo import baz), чтобы изменения вступили в силу. По этим причинам предпочтительнее запускать IDLE с подпроцессом по умолчанию, если это возможно.

Устарело с версии 3.4.

Справка и настройкиHelp and preferences

Источники справкиHelp sources

Пункт меню «IDLE Help» отображает форматированную HTML-версию главы об IDLE из справочника по библиотеке. Результат, в окне только для чтения на tkinter, близок к тому, что видно в веб-браузере. Пролистывайте текст с помощью колесика мыши, полосы прокрутки или удерживая клавиши вверх/вниз. Или нажмите кнопку TOC (Table of Contents) и выберите заголовок раздела в открывшемся окне.

Пункт меню «Python Docs» открывает обширные источники справки, включая руководства, доступные по адресу docs.python.org/x.y, где ‘x.y’ – текущая версия Python. Если в вашей системе есть локальная копия документации (это может быть опцией установки), будет открыта она.

Выбранные URL-адреса можно добавлять или удалять из меню справки в любое время с помощью вкладки General диалога Configure IDLE.

Настройка параметровSetting preferences

Настройки шрифта, подсветки, клавиш и общие настройки можно изменить через Configure IDLE в меню Option. Нестандартные пользовательские настройки сохраняются в каталоге .idlerc в домашнем каталоге пользователя. Проблемы, вызванные некорректными конфигурационными файлами пользователя, решаются редактированием или удалением одного или нескольких файлов в .idlerc.

На вкладке Font смотрите образец текста для оценки влияния гарнитуры и размера шрифта на разные символы разных языков. Отредактируйте образец, чтобы добавить другие символы, представляющие личный интерес. Используйте образец для выбора моноширинных шрифтов. Если отдельные символы отображаются с проблемами в Shell или редакторе, добавьте их в начало образца и попробуйте изменить сначала размер, а затем шрифт.

На вкладке «Подсветка и клавиши» выберите встроенную или пользовательскую цветовую схему и набор клавиш. Чтобы использовать более новую встроенную цветовую схему или набор клавиш в старых версиях IDLE, сохраните её как новую пользовательскую цветовую схему или набор клавиш, и она будет доступна в старых версиях IDLE.

IDLE на macOSIDLE on macOS

В настройках системы: Dock, можно установить «Prefer tabs when opening documents» в значение «Always». Эта настройка несовместима с графической библиотекой tk/tkinter, используемой в IDLE, и нарушает работу некоторых функций IDLE.

РасширенияExtensions

IDLE содержит механизм расширений. Настройки расширений можно изменить на вкладке «Extensions» диалога настроек. Обратитесь к началу файла config-extensions.def в каталоге idlelib для получения дополнительной информации. Единственное текущее расширение по умолчанию – zzdummy, пример, также используемый для тестирования.