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 и процессом выполнения кода пользователя. Подключение должно быть установлено всякий раз, когда оболочка запускается или перезапускается. (Последнее обозначается разделительной линией, которая говорит «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 используйте диспетчер задач, чтобы проверить его и остановить, если он есть. Иногда перезапуск, вызванный сбоем программы или прерыванием клавиатурой (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.
Отправка выходных данных печати из одного процесса в текстовый виджет другого процесса медленнее, чем печать в системный терминал в том же процессе. Это наиболее заметно при печати нескольких аргументов, поскольку строка для каждого аргумента, каждый разделитель, новая строка отправляются отдельно. Для разработки это обычно не проблема, но если вам нужно печатать быстрее в 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 Text. Другие — это программно добавленные функции. Там, где это важно, оболочка предназначена для разработки, а не для производственных запусков.
Например, оболочка никогда не удаляет вывод. Программа, которая отправляет неограниченный вывод в оболочку, в конечном итоге заполнит память, что приведёт к ошибке памяти. В отличие от этого, некоторые текстовые окна системы хранят только последние n строк вывода. Например, консоль Windows хранит настраиваемое пользователем количество строк от 1 до 9999, по умолчанию — 300.
Виджет Tk Text, а значит и оболочка IDLE, отображает символы (кодовые точки) в подмножестве BMP (Basic Multilingual Plane) 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 на странице «Общие» диалога настроек. Вывод с меньшим количеством строк можно сжать, щелкнув правой кнопкой мыши по выводу. Это может быть полезно для достаточно длинных строк, чтобы замедлить прокрутку.
Сжатый вывод можно развернуть на месте, дважды щелкнув по метке. Его также можно скопировать в буфер обмена или в отдельное окно просмотра, щелкнув правой кнопкой мыши по метке.
Разработка приложений 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, он будет работать в одном процессе и не создаст подпроцесс, который выполняет сервер выполнения RPC Python. Это может быть полезно, если Python не может создать подпроцесс или интерфейс сокета RPC на вашей платформе. Однако в этом режиме пользовательский код не изолирован от самого IDLE. Кроме того, среда не перезапускается при выборе «Запустить/Запустить модуль» (F5). Если ваш код был изменён, необходимо перезагрузить соответствующие модули с помощью reload() и повторно импортировать любые специфические элементы (например, из foo импортировать baz), чтобы изменения вступили в силу. По этим причинам предпочтительно запускать IDLE с подпроцессом по умолчанию, если это возможно.
Устарело начиная с версии 3.4.
Справка и настройки
Источники справки
Элемент меню «Справка» «Справка IDLE» отображает отформатированную версию HTML главы IDLE в справочнике по библиотекам. Результат в окне только для чтения tkinter текстового окна близок к тому, что вы видите в веб-браузере. Перемещайтесь по тексту с помощью колесика мыши, полосы прокрутки или удерживая нажатыми клавиши вверх/вниз. Или нажмите кнопку «Оглавление» и выберите заголовок раздела в открывшемся окне.
Элемент меню «Документация Python» открывает обширные источники справки, включая учебники, доступные по адресу docs.python.org/x.y, где 'x.y' — текущая версия Python. Если на вашей системе есть автономная копия документации (это может быть опция установки), она будет открыта вместо неё.
Выбранные URL-адреса можно добавлять или удалять из меню справки в любое время, используя вкладку «Общие» диалогового окна «Настроить IDLE».
Настройка предпочтений
Настройки шрифта, подсветки, клавиш и общие настройки можно изменить, выбрав «Настроить IDLE» в меню «Параметры». Пользовательские настройки, отличные от значений по умолчанию, сохраняются в каталоге .idlerc в домашнем каталоге пользователя. Проблемы, вызванные плохими конфигурационными файлами пользователя, решаются путём редактирования или удаления одного или нескольких файлов в .idlerc.
На вкладке «Шрифт» обратите внимание на пример текста, чтобы увидеть влияние набора символов и размера шрифта на несколько символов на нескольких языках. Редактируйте пример, чтобы добавить другие символы, которые вас интересуют. Используйте пример, чтобы выбрать моноширинные шрифты. Если у отдельных символов возникнут проблемы в оболочке или редакторе, добавьте их в начало примера и попробуйте сначала изменить размер, а затем шрифт.
На вкладке «Подсветка и клавиши» выберите встроенную или пользовательскую цветовую схему и набор клавиш. Чтобы использовать более новую встроенную цветовую схему или набор клавиш со старыми версиями IDLE, сохраните её как новую пользовательскую схему или набор клавиш, и она будет доступна в более старых версиях IDLE.
IDLE в macOS
В настройках системы: Панель задач, вы можете установить «Предпочитать вкладки при открытии документов» в «Всегда». Эта настройка не совместима с фреймворком графического интерфейса tk/tkinter, используемым IDLE, и нарушает работу некоторых функций 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.13/library/idle.html