IDLE — редактор и оболочка Python
Исходный код: Lib/idlelib/
IDLE — это интегрированная среда разработки и обучения Python.
IDLE обладает следующими возможностями:
- кроссплатформенность: работает практически одинаково в Windows, Unix и macOS
- окно оболочки Python (интерактивный интерпретатор) с цветовой подсветкой вводимого кода, вывода и сообщений об ошибках
- многооконный текстовый редактор с многоуровневой отменой действий, цветовой подсветкой Python, интеллектуальными отступами, подсказками вызовов, автодополнением и другими возможностями
- поиск в любом окне, замена в окнах редактора и поиск по нескольким файлам (grep)
- отладчик с сохраняемыми точками останова, пошаговым выполнением и просмотром глобальных и локальных пространств имён
- настройка, обозреватели и другие диалоговые окна
Запуск и выполнение кода
При запуске с параметром -s IDLE выполнит файл, указанный переменными среды IDLESTARTUP или PYTHONSTARTUP. Сначала IDLE проверяет наличие IDLESTARTUP; если присутствует IDLESTARTUP, запускается указанный файл. Если IDLESTARTUP отсутствует, IDLE проверяет наличие PYTHONSTARTUP. Файлы, указанные этими переменными среды, удобно использовать для хранения функций, часто вызываемых из оболочки IDLE, или для выполнения инструкций импорта распространённых модулей.
Кроме того, 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 с сообщением «не удаётся подключиться», которое направляет пользователя на эту страницу. После этого процесс завершается.
Одна из конкретных причин сбоя подключения в 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 выполняет пользовательский код в отдельном процессе ОС, а не в процессе пользовательского интерфейса, в котором работают оболочка и редактор. В процессе выполнения 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. При необходимости файл будет открыт.
В оболочке есть специальная функция сворачивания строк вывода в метку «Сжатый текст». Она срабатывает автоматически для вывода, превышающего 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. Кроме того, при выборе «Запуск/Запустить модуль» (F5) среда не перезапускается. Если код был изменён, необходимо вызвать reload() для затронутых модулей и повторно импортировать отдельные элементы (например, from foo import baz), чтобы изменения вступили в силу. По этим причинам по возможности предпочтительно запускать IDLE с дочерним процессом, используемым по умолчанию.
Устарело с версии 3.4.
Справка и настройки
Источники справки
Пункт меню «Справка» — «Справка IDLE» отображает отформатированную HTML-версию главы об IDLE из справочника библиотеки. Результат выводится в доступном только для чтения текстовом окне 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
В разделе System Preferences: Dock можно задать для параметра «Prefer tabs when opening documents» значение «Always». Эта настройка несовместима с графическим интерфейсом tk/tkinter, который использует IDLE, и нарушает работу некоторых функций IDLE.
Расширения
IDLE поддерживает расширения. Их параметры можно изменить на вкладке Extensions диалогового окна настроек. Дополнительные сведения см. в начале файла config-extensions.def в каталоге idlelib. Единственное расширение, включённое по умолчанию на данный момент, — zzdummy; это пример, который также используется для тестирования.
idlelib — реализация приложения IDLE
Исходный код: Lib/idlelib
Пакет Lib/idlelib реализует приложение IDLE. Инструкции по использованию IDLE приведены в остальных разделах этой страницы.
Описание файлов в idlelib находится в idlelib/README.txt. Откройте его в каталоге idlelib или выберите «Справка» => «О программе IDLE» в меню IDLE. В этом файле также указано, какие пункты меню IDLE соответствуют реализующему их коду. За исключением файлов, перечисленных в разделе «Startup», код idlelib является «внутренним» в том смысле, что изменения функций можно перенести в предыдущие версии (см. PEP 434).
© 2001–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.12/library/idle.html