IDLE
Исходный код: Lib/idlelib/
IDLE — это интегрированная среда разработки и обучения Python.
IDLE обладает следующими функциями:
- написан на 100% чистом Python, используя GUI-набор инструментов
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 используйте диспетчер задач, чтобы проверить наличие такого процесса и остановить его, если он есть. Иногда перезапуск, вызванный сбоем программы или прерыванием с клавиатуры (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 необходимо запустить в окне командной строки. (В 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, отображает символы (кодовые точки) в подмножестве 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. Тогда сразу появляется приглашение командной строки и можно взаимодействовать с активным приложением. Нужно лишь помнить о необходимости повторной активации вызова mainloop при запуске в стандартном Python.
Запуск без подпроцесса
По умолчанию IDLE выполняет пользовательский код в отдельном подпроцессе через сокет, который использует внутренний интерфейс обратной связи. Эта связь не видна извне и никакие данные не отправляются на интернет и не принимаются с него. Если программное обеспечение брандмауэра всё равно выдаёт предупреждения, их можно игнорировать.
Если попытка установить соединение по сокету завершается неудачно, Idle уведомит вас об этом. Такие сбои иногда временные, но при их постоянном повторении проблема может быть либо в брандмауэре, блокирующем соединение, либо в неправильной настройке системы. До тех пор, пока проблема не будет устранена, можно запустить Idle с командной строкой -n.
Если IDLE запускается с флагом командной строки -n, он будет работать в одном процессе и не создаст подпроцесс, который запускает сервер выполнения RPC Python. Это может быть полезно, если Python не может создать подпроцесс или интерфейс сокета RPC на вашей платформе. Однако в этом режиме пользовательский код не изолирован от самого IDLE. Также среда не перезапускается при выборе «Запустить/Запустить модуль» (F5). Если ваш код был изменён, необходимо перезагрузить() затронутые модули и повторно импортировать любые конкретные элементы (например, from foo import 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
В системе macOS в настройках «Панель задач» можно установить «Предпочитать вкладки при открытии документов» в положение «Всегда». Эта настройка несовместима с фреймворком tk/tkinter GUI, используемым 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.10/library/idle.html