IDLE
Исходный код: 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.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'. Окно редактора не открывается, даже если это задано по умолчанию в диалоговом окне «Параметры». - В противном случае аргументы рассматриваются как файлы для редактирования, а
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 выполняет пользовательский код в отдельном процессе ОС, а не в процессе пользовательского интерфейса, в котором работают оболочка и редактор. В процессе выполнения 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 на странице «Общие» диалогового окна настроек. Вывод из меньшего числа строк можно свернуть, щёлкнув по нему правой кнопкой мыши. Это может быть полезно для длинных строк, замедляющих прокрутку.
Свёрнутый вывод разворачивается на месте двойным щелчком по метке. Щёлкнув по метке правой кнопкой мыши, его также можно отправить в буфер обмена или открыть в отдельном окне просмотра.
Разработка приложений 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-адреса можно в любое время добавлять в меню справки или удалять из него на вкладке «Общие» диалогового окна настройки IDLE.
Настройка параметров
Параметры шрифта, подсветки, клавиш и общие параметры можно изменить с помощью команды «Настроить IDLE» в меню «Параметры». Пользовательские настройки, отличающиеся от настроек по умолчанию, сохраняются в каталоге .idlerc в домашнем каталоге пользователя. Проблемы, вызванные некорректными пользовательскими файлами конфигурации, устраняются редактированием или удалением одного или нескольких файлов в .idlerc.
На вкладке «Шрифт» изучите образец текста, чтобы увидеть, как начертание и размер шрифта влияют на отображение символов разных языков. Измените образец, добавив другие интересующие вас символы. Используйте образец для выбора моноширинных шрифтов. Если некоторые символы отображаются некорректно в оболочке или редакторе, добавьте их в начало образца и попробуйте сначала изменить размер, а затем шрифт.
На вкладке «Подсветка и клавиши» выберите встроенную или пользовательскую цветовую тему и набор клавиш. Чтобы использовать новую встроенную цветовую тему или набор клавиш в более старых версиях IDLE, сохраните их как новую пользовательскую тему или набор клавиш — после этого они будут доступны и в старых версиях IDLE.
IDLE в macOS
В разделе «Системные настройки» → «Dock» можно установить для параметра «Предпочитать вкладки при открытии документов» значение «Всегда». Эта настройка несовместима с графической платформой tk/tkinter, используемой IDLE, и нарушает работу некоторых его функций.
Расширения
В IDLE предусмотрена поддержка расширений. Параметры расширений можно изменить на вкладке «Расширения» диалогового окна настройки. Дополнительные сведения см. в начале файла config-extensions.def в каталоге idlelib. Единственное стандартное расширение на данный момент — zzdummy; это пример, который также используется для тестирования.
idlelib
Исходный код: Lib/idlelib
Пакет Lib/idlelib реализует приложение IDLE. Инструкции по использованию IDLE приведены в остальных разделах этой страницы.
Описание файлов в idlelib приведено в idlelib/README.txt. Откройте его в каталоге idlelib или выберите «Справка» => «Об IDLE» в меню IDLE. В этом файле также указано соответствие пунктов меню IDLE коду, который их реализует. За исключением файлов, перечисленных в разделе «Запуск», код idlelib является «внутренним» в том смысле, что изменения функциональности могут быть перенесены в предыдущие версии (см. PEP 434).
© 2001–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.11/library/idle.html