IDLE
Исходный код: Lib/idlelib/
IDLE — это интегрированная среда разработки и обучения Python.
IDLE обладает следующими возможностями:
- написан на 100% чистом Python, используя библиотеку
tkinterдля графического интерфейса - кроссплатформенность: работает практически одинаково на 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 GUI и процессом выполнения кода пользователя. Подключение должно быть установлено каждый раз, когда оболочка запускается или перезапускается. (Последнее указывается разделительной линией, которая гласит «RESTART»). Если процесс пользователя не может подключиться к процессу GUI, он обычно отображает диалоговое окно с ошибкой 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 не может импортировать файл stdlib. Текущее решение — переименовать файл пользователя.
Хотя это менее распространено, чем раньше, антивирусная программа или брандмауэр могут прервать подключение. Если программе нельзя объяснить, как разрешить подключение, её нужно отключить, чтобы 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 должен запускаться в окне командной строки. В этом случае дочерний процесс будет подключен к этому окну для ввода и вывода.
Если sys сброшен пользовательским кодом, например, с помощью importlib.reload(sys), изменения IDLE теряются, и ввод с клавиатуры и вывод на экран не будут работать правильно.
Когда у оболочки фокус, она управляет клавиатурой и экраном. Это обычно прозрачно, но функции, которые напрямую обращаются к клавиатуре и экрану, не будут работать. К ним относятся функции, специфичные для системы, которые определяют, была ли нажата клавиша и если да, то какая.
Код IDLE, работающий в процессе выполнения, добавляет фреймы в стек вызовов, которые в противном случае отсутствовали. IDLE оборачивает sys.getrecursionlimit и sys.setrecursionlimit для уменьшения влияния дополнительных фреймов стека.
Когда пользовательский код вызывает SystemExit, либо напрямую, либо вызывая sys.exit, IDLE возвращается к приглашению оболочки, а не завершается.
Вывод пользователя в оболочке
При выводе программы текста результат зависит от соответствующего устройства вывода. При выполнении пользовательского кода в IDLE sys.stdout и sys.stderr подключены к области отображения оболочки IDLE. Некоторые её функции унаследованы от базового виджета Tk Text. Другие являются программными дополнениями. Где это важно, оболочка предназначена для разработки, а не для производственных запусков.
Например, оболочка никогда не удаляет вывод. Программа, которая отправляет неограниченный вывод в оболочку, в конечном итоге заполнит память, что приведёт к ошибке памяти. В отличие от этого, некоторые системные текстовые окна сохраняют только последние n строк вывода. Например, консоль Windows сохраняет от 1 до 9999 строк, заданных пользователем, по умолчанию 300.
Виджет Tk Text, а следовательно и оболочка IDLE, отображает символы (кодовые точки) в подмножестве Unicode BMP (Basic Multilingual Plane). Какие символы отображаются с правильным глифом, а какие — с замещающим символом, зависит от операционной системы и установленных шрифтов. Символы табуляции делают следующий текст началом после следующей позиции табуляции. (Они появляются через каждые 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. В стандартном Python ввод import tkinter as tk;
root = tk.Tk() ничего не отображает. В 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). Если ваш код был изменён, необходимо перезагрузить () затронутые модули и повторно импортировать все специфичные элементы (например, from foo import baz), чтобы изменения вступили в силу. По этим причинам предпочтительнее запускать IDLE с подпроцессом по умолчанию, если это возможно.
Устарело начиная с версии 3.4.
Справка и настройки
Источники справки
Элемент меню «Справка IDLE» отображает форматированную html-версию главы IDLE в Справочнике по библиотекам. Результат в окне текстового окна tkinter только для чтения почти идентичен тому, что вы видите в веб-браузере. Перемещайтесь по тексту с помощью колесика мыши, полосы прокрутки или удерживания клавиш со стрелками вверх и вниз. Или нажмите кнопку TOC (Оглавление) и выберите заголовок раздела в открытом окне.
Элемент меню «Документация Python» открывает обширные источники справки, включая учебные пособия, доступные по адресу docs.python.org/x.y, где ‘x.y’ — текущая версия Python. Если на вашей системе есть автономная копия документации (это может быть вариант установки), она будет открыта вместо неё.
Выбранные URL-адреса можно добавлять или удалять из меню справки в любое время, используя вкладку «Общие» диалогового окна «Настройка IDLE».
Настройка предпочтений
Настройки шрифтов, подсветки, клавиш и общие настройки можно изменить, выбрав «Настроить IDLE» в меню «Опции». Нестандартные пользовательские настройки сохраняются в каталоге .idlerc в домашнем каталоге пользователя. Проблемы, вызванные плохими файлами конфигурации пользователя, решаются путём редактирования или удаления одного или нескольких файлов в .idlerc.
На вкладке «Шрифт» обратите внимание на образец текста, чтобы увидеть влияние набора шрифтов и размера шрифта на несколько символов на разных языках. Редактируйте образец, чтобы добавить другие символы, которые вас интересуют. Используйте образец, чтобы выбрать моноширинные шрифты. Если у отдельных символов возникают проблемы в оболочке или редакторе, добавьте их в начало образца и попробуйте сначала изменить размер, а затем шрифт.
На вкладке «Подсветка и клавиши» выберите встроенную или пользовательскую цветовую тему и набор клавиш. Чтобы использовать более новую встроенную цветовую тему или набор клавиш со старыми версиями IDLE, сохраните её как новую пользовательскую тему или набор клавиш, и она будет доступна в старых версиях IDLE.
IDLE в macOS
В настройках системы: Панель задач можно установить «Предпочитать вкладки при открытии документов» в «Всегда». Эта настройка несовместима с фреймворком GUI tk/tkinter, используемым IDLE, и нарушает несколько функций IDLE.
Расширения
IDLE содержит механизм расширений. Настройки расширений можно изменить на вкладке «Расширения» диалогового окна настроек. Дополнительную информацию см. в начале файла config-extensions.def в каталоге idlelib. Единственным текущим расширением по умолчанию является zzdummy, пример, также используемый для тестирования.
© 2001–2022 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.8/library/idle.html