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 и процессом выполнения пользовательского кода. Подключение должно быть установлено при каждом запуске или перезапуске оболочки. (Последний случай обозначен разделительной линией, в которой написано «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 не может импортировать файл stdlib. Текущее решение — переименовать файл пользователя.
Хотя это случается реже, чем раньше, программа антивируса или брандмауэр может блокировать подключение. Если программу невозможно убедить разрешить подключение, её нужно отключить, чтобы IDLE работало. Безопасно разрешать это внутреннее соединение, поскольку данные не видны на внешних портах. Похожая проблема — неправильная конфигурация сети, блокирующая соединения.
Иногда проблемы с установкой Python препятствуют запуску IDLE: могут конфликтовать несколько версий или одна установка может потребовать прав администратора. Если конфликт разрешить, или вы не можете или не хотите запускаться от имени администратора, проще всего полностью удалить Python и начать заново.
Процесс-зомби pythonw.exe может быть проблемой. В Windows используйте Диспетчер задач, чтобы проверить его и остановить, если он есть. Иногда перезапуск, вызванный сбоем программы или прерыванием с клавиатуры (Ctrl-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 заменены на коды экранирования. Как показано выше, это позволяет идентифицировать символы в строке независимо от способа их отображения.
Обычный и ошибочный вывод обычно сохраняются отдельно (на разных строках) от входного кода и друг от друга. Каждый из них получает разные цвета выделения.
Для отслеживания 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. Тогда вы сразу получите приглашение командной строки и сможете взаимодействовать с активным приложением. Просто нужно помнить, что при запуске в стандартном Python необходимо снова включить вызов mainloop.
Запуск без подпроцесса
По умолчанию IDLE выполняет пользовательский код в отдельном подпроцессе через сокет, который использует внутренний интерфейс обратной связи. Эта связь не видна извне и никакие данные не отправляются или не принимаются из интернета. Если программное обеспечение брандмауэра всё равно жалуется, вы можете его проигнорировать.
Если попытка установить соединение по сокету завершается неудачей, Idle уведомит вас. Такие сбои иногда временные, но если они повторяются, проблема может быть либо в том, что брандмауэр блокирует соединение, либо в неправильной настройке конкретной системы. До тех пор, пока проблема не будет решена, вы можете запустить Idle с помощью командной строки -n.
Если IDLE запускается с командной строкой -n, он будет работать в одном процессе и не будет создавать подпроцесс, который запускает сервер выполнения RPC Python. Это может быть полезно, если Python не может создать подпроцесс или интерфейс сокета RPC на вашей платформе. Однако в этом режиме пользовательский код не изолирован от самого IDLE. Кроме того, среда не перезапускается при выборе «Запуск/Запуск модуля» (F5). Если ваш код был изменён, необходимо перезагрузить() соответствующие модули и повторно импортировать любые конкретные элементы (например, из foo импортировать 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.9/library/idle.html