Содержание страницы
25.5. IDLE¶
Исходный код: Lib/idlelib/
IDLE – это интегрированная среда разработки и обучения Python.
IDLE имеет следующие возможности:
написан на 100% чистом Python с использованием GUI-тулкита
tkinterкроссплатформенность: в основном одинаково работает на Windows, Unix и macOS
окно оболочки Python (интерактивный интерпретатор) с цветовой подсветкой вводимого кода, вывода и сообщений об ошибках
многооконный текстовый редактор с множественной отменой, подсветкой синтаксиса Python, умными отступами, подсказками вызова, автозавершением и другими функциями
поиск в любом окне, замена в окнах редактора и поиск по нескольким файлам (grep)
отладчик с постоянными точками останова, пошаговым выполнением и просмотром глобального и локального пространства имён
настройки, обозреватели и другие диалоговые окна
25.5.3. Запуск и выполнение кода¶Startup and code execution
При запуске с опцией -s IDLE выполняет файл, на который ссылаются переменные среды IDLESTARTUP или PYTHONSTARTUP. IDLE сначала проверяет IDLESTARTUP; если IDLESTARTUP присутствует, запускается указанный файл. Если IDLESTARTUP отсутствует, IDLE проверяет PYTHONSTARTUP. Файлы, на которые ссылаются эти переменные среды, удобно использовать для хранения функций, часто используемых из Shell IDLE, или для выполнения операторов импорта общих модулей.
Кроме того, Tk также загружает файл запуска, если он существует. Обратите внимание, что Tk-файл загружается безусловно. Этот дополнительный файл – .Idle.py, он ищется в домашнем каталоге пользователя. Операторы в этом файле будут выполняться в пространстве имён Tk, поэтому этот файл не подходит для импорта функций, используемых из Python Shell IDLE.
25.5.3.1. Использование командной строки¶Command line usage
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'. Окно редактора не открывается, даже если это выбрано по умолчанию в диалоге Options.В противном случае аргументы являются файлами, открытыми для редактирования, и
sys.argvотражает аргументы, переданные самому IDLE.
25.5.3.2. Ошибки при запуске¶Startup failure
IDLE использует сокет для связи между процессом графического интерфейса IDLE и процессом выполнения пользовательского кода. Соединение должно устанавливаться при каждом запуске или перезапуске оболочки. (Последнее обозначается разделительной линией с надписью «RESTART».) Если пользовательский процесс не может подключиться к процессу GUI, отображается Tk окно ошибки с сообщением «cannot connect», которое направляет пользователя сюда. Затем процесс завершается.
Частая причина сбоя – файл пользователя с тем же именем, что и модуль стандартной библиотеки, например random.py и tkinter.py. Когда такой файл находится в той же директории, что и файл, который должен быть запущен, IDLE не может импортировать файл из стандартной библиотеки. Текущее решение – переименовать пользовательский файл.
Хотя и реже, чем в прошлом, антивирус или межсетевой экран могут блокировать соединение. Если программу нельзя научить разрешать соединение, её необходимо отключить для работы IDLE. Разрешать это внутреннее соединение безопасно, поскольку никакие данные не видны на внешних портах. Аналогичная проблема – неверная настройка сети, блокирующая соединения.
Проблемы с установкой Python иногда мешают работе IDLE: несколько версий могут конфликтовать, или для одной установки могут потребоваться права администратора. Если конфликт не устранён, или невозможно или нежелательно запускать от имени администратора, проще всего полностью удалить Python и начать заново.
Проблемой может быть процесс-зомби pythonw.exe. В Windows используйте Диспетчер задач, чтобы обнаружить и завершить его. Иногда перезапуск, вызванный сбоем программы или прерыванием с клавиатуры (Control-C), может не привести к подключению. Закрытие окна с ошибкой или команда Restart Shell в меню Shell могут исправить временную проблему.
При первом запуске IDLE пытается прочитать пользовательские конфигурационные файлы в ~/.idlerc/ (~ – домашний каталог пользователя). Если возникает проблема, должно отобразиться сообщение об ошибке. Не считая случайных сбоев диска, этого можно избежать, никогда не редактируя файлы вручную, а используя диалог конфигурации в меню Options. Если проблема возникла, решением может быть удаление одного или нескольких конфигурационных файлов.
Если IDLE завершается без сообщения и не был запущен из консоли, попробуйте
запустить из консоли (python -m idlelib) и посмотрите, появится ли сообщение.
25.5.3.3. Выполнение пользовательского кода¶Running user code
За редкими исключениями, результат выполнения кода Python в IDLE должен быть таким же, как при выполнении того же кода стандартным способом – напрямую с помощью Python в текстовой системной консоли или окне терминала. Однако различия в интерфейсе и работе иногда влияют на видимые результаты. Например, sys.modules начинается с большим количеством записей, а threading.activeCount() возвращает 2 вместо 1.
По умолчанию IDLE выполняет пользовательский код в отдельном процессе ОС, а не в процессе пользовательского интерфейса, который управляет оболочкой и редактором. В процессе выполнения он заменяет sys.stdin, sys.stdout и sys.stderr объектами, которые получают ввод из окна оболочки и отправляют вывод в него. Исходные значения, хранящиеся в sys.__stdin__, sys.__stdout__ и sys.__stderr__, не изменяются, но могут быть None.
Когда Shell находится в фокусе, он управляет клавиатурой и экраном. Обычно это незаметно, но функции, которые напрямую обращаются к клавиатуре и экрану, работать не будут. К ним относятся системно-зависимые функции, определяющие, была ли нажата клавиша, и если да, то какая.
Замена стандартных потоков IDLE не наследуется подпроцессами, созданными в процессе выполнения, будь то напрямую пользовательским кодом или модулями, такими как multiprocessing. Если такой подпроцесс использует input из sys.stdin или print или write для sys.stdout или sys.stderr, IDLE следует запускать в окне командной строки. Тогда вторичный подпроцесс будет привязан к этому окну для ввода и вывода.
Если sys сбрасывается пользовательским кодом, например, с помощью importlib.reload(sys), изменения IDLE теряются, и ввод с клавиатуры и вывод на экран будут работать неправильно.
25.5.3.4. Вывод пользователя в оболочке¶User output in Shell
Когда программа выводит текст, результат определяется соответствующим устройством вывода. Когда IDLE выполняет пользовательский код, sys.stdout и sys.stderr подключены к области отображения Shell IDLE. Некоторые его функции унаследованы от базового виджета Tk Text. Другие являются программными дополнениями. Там, где это важно, Shell спроектирован для разработки, а не для эксплуатации в промышленной среде.
Например, Shell никогда не отбрасывает вывод. Программа, которая отправляет неограниченный вывод в Shell, в конечном итоге заполнит память, что приведет к ошибке памяти. Напротив, некоторые системные текстовые окна сохраняют только последние n строк вывода. Например, консоль Windows сохраняет настраиваемые пользователем от 1 до 9999 строк, по умолчанию 300.
Текстовые виджеты отображают подмножество Unicode – основную многоязычную плоскость (BMP).
Какие символы получают правильный глиф вместо замещающего прямоугольника, зависит от
операционной системы и установленных шрифтов. Символы новой строки вызывают появление следующего
текста на новой строке, но другие управляющие символы либо
заменяются прямоугольником, либо удаляются. Однако repr(), который используется для
интерактивного эха значений выражений, заменяет управляющие символы,
некоторые кодовые точки BMP и все символы не из BMP на управляющие последовательности
перед выводом.
Обычный вывод и вывод ошибок, как правило, отделены (на отдельных строках) от ввода кода и друг от друга. Они получают разные цвета подсветки.
Для трассировок SyntaxError обычная пометка ‘^’ в месте обнаружения ошибки заменяется выделением текста цветом ошибки. Когда код, запущенный из файла, вызывает другие исключения, можно щелкнуть правой кнопкой мыши по строке трассировки, чтобы перейти к соответствующей строке в редакторе IDLE. Файл будет открыт при необходимости.
В Shell есть специальная возможность сжимать строки вывода до метки «Сжатый текст». Это делается автоматически для вывода, превышающего N строк (по умолчанию N = 50). N можно изменить в разделе PyShell на вкладке General диалога Settings. Вывод с меньшим количеством строк можно сжать, щелкнув по нему правой кнопкой мыши. Это может быть полезно для строк, достаточно длинных, чтобы замедлить прокрутку.
Сжатый вывод разворачивается на месте двойным щелчком по метке. Его также можно отправить в буфер обмена или отдельное окно просмотра, щелкнув правой кнопкой мыши по метке.
25.5.3.5. Разработка приложений tkinter¶Developing tkinter applications
IDLE намеренно отличается от стандартного Python, чтобы
облегчить разработку программ tkinter. Введите import tkinter as tk;
root = tk.Tk() в стандартном Python – ничего не появится. Введите то же самое
в 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, приглашение >>> shell не появляется, пока mainloop() не вернётся, после чего уже не с чем взаимодействовать.
При запуске tkinter-программы из редактора IDLE можно закомментировать вызов mainloop. Тогда сразу появляется приглашение shell, и можно взаимодействовать с работающим приложением. Нужно только не забыть снова включить вызов mainloop при запуске в стандартном Python.
25.5.3.6. Запуск без подпроцесса¶Running without a subprocess
По умолчанию IDLE выполняет пользовательский код в отдельном подпроцессе через сокет, использующий внутренний интерфейс loopback. Это соединение не видно извне, и никакие данные не отправляются и не принимаются из Интернета. Если брандмауэр всё равно выдаёт предупреждение, его можно игнорировать.
Если попытка установить сокетное соединение не удаётся, IDLE уведомит вас. Такие сбои иногда носят временный характер, но если они постоянны, проблема может заключаться либо в блокировке соединения брандмауэром, либо в неправильной конфигурации конкретной системы. Пока проблема не решена, можно запускать IDLE с ключом командной строки -n.
Если IDLE запущен с ключом командной строки -n, он будет работать в одном процессе и не будет создавать подпроцесс, запускающий RPC-сервер выполнения Python. Это может быть полезно, если Python не может создать подпроцесс или сокетный интерфейс RPC на вашей платформе. Однако в этом режиме пользовательский код не изолирован от самого IDLE. Кроме того, среда не перезапускается при выборе Run/Run Module (F5). Если ваш код был изменён, необходимо выполнить reload() для затронутых модулей и повторно импортировать любые конкретные элементы (например, from foo import baz), чтобы изменения вступили в силу. По этим причинам предпочтительнее запускать IDLE с подпроцессом по умолчанию, если это возможно.
Устарело с версии 3.4.
25.5.4. Справка и настройки¶Help and preferences
25.5.4.1. Источники справки¶Help sources
Пункт меню «IDLE Help» отображает форматированную HTML-версию главы об IDLE из справочника по библиотеке. Результат, в окне только для чтения на tkinter, близок к тому, что видно в веб-браузере. Пролистывайте текст с помощью колесика мыши, полосы прокрутки или удерживая клавиши вверх/вниз. Или нажмите кнопку TOC (Table of Contents) и выберите заголовок раздела в открывшемся окне.
Пункт меню Help «Python Docs» открывает обширные источники справки, включая руководства, доступные на docs.python.org/x.y, где «x.y» – это текущая версия Python. Если в вашей системе есть офлайн-копия документации (это может быть опцией установки), будет открыта она.
Выбранные URL можно в любое время добавить или удалить из меню Help с помощью вкладки General диалога Configure IDLE.
25.5.4.2. Настройка параметров¶Setting preferences
Настройки шрифта, подсветки, клавиш и общие настройки можно изменить через Configure IDLE в меню Option. Клавиши можно определять пользовательски; IDLE поставляется с четырьмя встроенными наборами клавиш. Кроме того, пользователь может создать пользовательский набор клавиш в диалоге Configure IDLE на вкладке keys.
25.5.4.3. IDLE на macOS¶IDLE on macOS
В настройках системы: Dock, можно установить «Prefer tabs when opening documents» в значение «Always». Эта настройка несовместима с графической библиотекой tk/tkinter, используемой в IDLE, и нарушает работу некоторых функций IDLE.
25.5.4.4. Расширения¶Extensions
IDLE содержит механизм расширений. Настройки расширений можно изменить на вкладке «Extensions» диалога настроек. Обратитесь к началу файла config-extensions.def в каталоге idlelib для получения дополнительной информации. Единственное текущее расширение по умолчанию – zzdummy, пример, также используемый для тестирования.