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 не может импортировать файл стандартной библиотеки. Текущее решение — переименовать файл пользователя.
Хотя это менее распространено, чем раньше, антивирусная программа или брандмауэр могут блокировать подключение. Если программу нельзя научить разрешать подключение, её необходимо отключить для работы 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.
Отправка выходных данных печати из одного процесса в текстовое поле другого медленнее, чем вывод в системный терминал в том же процессе. Это наиболее заметно при печати нескольких аргументов, так как каждый аргумент, каждый разделитель, новая строка отправляются отдельно. Для разработки это обычно не проблема, но если вы хотите быстрее печатать в 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 возвращается к приглашению Shell вместо завершения.
Вывод пользователя в оболочке
Когда программа выводит текст, результат определяется соответствующим устройством вывода. Когда 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, он будет работать в одном процессе и не будет создавать подпроцесс, в котором выполняется сервер выполнения Python RPC. Это может быть полезно, если Python не может создать подпроцесс или интерфейс сокета RPC на вашей платформе. Однако в этом режиме код пользователя не изолирован от самого IDLE. Также среда не перезапускается при выборе пункта "Запуск/Запуск модуля" (F5). Если ваш код был изменён, для того чтобы изменения вступили в силу, необходимо перезагрузить() затронутые модули и повторно импортировать все необходимые элементы (например, из foo импортировать baz).
Устарело начиная с версии 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
В системе Preferences: Dock можно установить "Prefer tabs when opening documents" в положение "Always". Эта настройка несовместима с фреймворком GUI 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–2023 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.11/library/idle.html