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'
. Окно редактора не открывается, даже если оно установлено по умолчанию в диалоговом окне Options.В противном случае аргументами являются файлы, открытые для редактирования, а
sys.argv
отражает аргументы, переданные самой IDLE.
Сбой запуска¶
IDLE использует сокет для связи между процессом IDLE GUI и процессом выполнения пользовательского кода. Соединение должно быть установлено при каждом запуске или перезапуске оболочки. (Последнее обозначается разделительной линией с надписью „RESTART“). Если пользовательскому процессу не удается установить соединение с процессом GUI, он обычно выводит окно ошибки 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), может привести к невозможности подключения. Отключение окна ошибки или использование команды Restart Shell в меню Shell может устранить временную проблему.
При первом запуске 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
объектами, которые получают входные данные из окна Shell и отправляют выходные данные в него. Исходные значения, хранящиеся в sys.__stdin__
, sys.__stdout__
и sys.__stderr__
, не трогаются, но могут быть None
.
Отправка вывода печати из одного процесса на текстовый виджет в другом процессе происходит медленнее, чем печать на системный терминал в том же процессе. Это наиболее заметно при печати нескольких аргументов, поскольку строка для каждого аргумента, каждый разделитель и новая строка отправляются отдельно. Для разработки это обычно не проблема, но если хочется печатать быстрее в IDLE, отформатируйте и объедините все, что хотите вывести вместе, а затем выведите одну строку. Как строки форматирования, так и str.join()
могут помочь объединить поля и строки.
Стандартные замены потоков IDLE не наследуются подпроцессами, созданными в процессе выполнения, будь то непосредственно пользовательский код или модули, такие как мультипроцессинг. Если такой подпроцесс использует input
из sys.stdin или print
или write
в sys.stdout или sys.stderr, IDLE следует запускать в окне командной строки. (В Windows используйте python
или py
, а не pythonw
или pyw
.) Затем вторичный подпроцесс будет присоединен к этому окну для ввода и вывода.
Если sys
сбрасывается кодом пользователя, например, с помощью importlib.reload(sys)
, изменения IDLE теряются, и ввод с клавиатуры и вывод на экран будут работать некорректно.
Когда Shell имеет фокус, он управляет клавиатурой и экраном. Обычно это прозрачно, но функции, которые напрямую обращаются к клавиатуре и экрану, работать не будут. К ним относятся специфические для системы функции, которые определяют, была ли нажата клавиша, и если да, то какая.
Код IDLE, запущенный в процессе выполнения, добавляет в стек вызовов кадры, которых в противном случае там бы не было. IDLE обертывает sys.getrecursionlimit
и sys.setrecursionlimit
, чтобы уменьшить влияние дополнительных кадров стека.
Когда пользовательский код вызывает SystemExit либо напрямую, либо вызовом sys.exit, IDLE возвращается к приглашению Shell вместо выхода.
Пользовательский вывод в Shell¶
Когда программа выводит текст, результат определяется соответствующим устройством вывода. Когда IDLE выполняет пользовательский код, sys.stdout
и sys.stderr
подключаются к области отображения оболочки IDLE. Некоторые из его возможностей унаследованы от базового виджета Tk Text. Другие являются программными дополнениями. Там, где это важно, Shell предназначен скорее для разработки, чем для серийного использования.
Например, Shell никогда не выбрасывает выводимые данные. Программа, посылающая в Shell неограниченное количество вывода, в конце концов заполнит память, что приведет к ошибке памяти. В отличие от этого, некоторые системные текстовые окна сохраняют только последние n строк вывода. Например, консоль Windows сохраняет от 1 до 9999 строк, настраиваемых пользователем, по умолчанию 300.
Виджет Tk Text, а значит и оболочка IDLE, отображает символы (кодовые точки) в подмножестве 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. При необходимости файл будет открыт.
Shell имеет специальное средство для сжатия выводимых строк до метки „Сжатый текст“. Это делается автоматически при выводе более N строк (по умолчанию N = 50). N можно изменить в разделе PyShell на странице Общие диалогового окна Настройки. Вывод с меньшим количеством строк можно сжать, щелкнув правой кнопкой мыши на выводе. Это может быть полезно для строк достаточной длины, чтобы замедлить прокрутку.
Сжатый вывод разворачивается на месте двойным щелчком по метке. Его также можно отправить в буфер обмена или в отдельное окно просмотра, щелкнув по метке правой кнопкой мыши.
Разработка приложений tkinter¶
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, приглашение оболочки >>>
не появляется до возвращения mainloop()
, после чего не остается ничего, с чем можно было бы взаимодействовать.
При запуске программы tkinter из редактора IDLE можно закомментировать вызов mainloop. Тогда сразу же появляется приглашение оболочки и можно взаимодействовать с живым приложением. Нужно только не забыть снова включить вызов mainloop при выполнении в стандартном Python.
Запуск без подпроцесса¶
По умолчанию IDLE выполняет пользовательский код в отдельном подпроцессе через сокет, который использует внутренний интерфейс loopback. Это соединение не видно извне, и никакие данные не отправляются в Интернет и не принимаются из него. Если программное обеспечение брандмауэра все равно жалуется, вы можете игнорировать это.
Если попытка установить сокетное соединение не удалась, Idle сообщит вам об этом. Такие сбои иногда преходящи, но если они продолжаются, то проблема может заключаться либо в брандмауэре, блокирующем соединение, либо в неправильной конфигурации конкретной системы. Пока проблема не устранена, можно запускать Idle с ключом командной строки -n.
Если IDLE запускается с ключом командной строки -n, он будет работать в одном процессе и не будет создавать подпроцесс, который запускает сервер выполнения RPC Python. Это может быть полезно, если Python не может создать подпроцесс или интерфейс сокета RPC на вашей платформе. Однако в этом режиме пользовательский код не изолирован от самой IDLE. Кроме того, среда не перезапускается при выборе Run/Run Module (F5). Если ваш код был изменен, вы должны перезагрузить() затронутые модули и повторно импортировать любые специфические элементы (например, from foo import baz), чтобы изменения вступили в силу. По этим причинам предпочтительнее запускать IDLE с подпроцессом по умолчанию, если это вообще возможно.
Не рекомендуется, начиная с версии 3.4.
Помощь и предпочтения¶
Источники помощи¶
Пункт меню Help «IDLE Help» отображает отформатированную html-версию главы IDLE Справочника по библиотеке. Результат в текстовом окне tkinter, доступном только для чтения, близок к тому, что можно увидеть в веб-браузере. Перемещайтесь по тексту с помощью колеса мыши, полосы прокрутки или клавиш со стрелками вверх и вниз. Или нажмите кнопку TOC (Оглавление) и выберите заголовок раздела в открывшемся окне.
Пункт меню «Python Docs» открывает обширные источники справки, включая учебники, доступные по адресу docs.python.org/x.y
, где „x.y“ - текущая версия Python. Если в вашей системе есть автономная копия документации (это может быть опцией установки), она будет открыта вместо этого.
Выбранные URL-адреса могут быть добавлены или удалены из меню справки в любое время с помощью вкладки Общие диалогового окна Настройка IDLE.
Настройка предпочтений¶
Настройки шрифта, подсветки, клавиш и общие настройки можно изменить через Configure IDLE в меню Option. Настройки пользователя, не установленные по умолчанию, сохраняются в каталоге .idlerc
в домашнем каталоге пользователя. Проблемы, вызванные плохими пользовательскими конфигурационными файлами, решаются путем редактирования или удаления одного или нескольких файлов в каталоге .idlerc
.
На вкладке Шрифт посмотрите образец текста, чтобы увидеть влияние начертания и размера шрифта на несколько символов на разных языках. Отредактируйте образец, чтобы добавить другие символы, представляющие личный интерес. Используйте образец для выбора моноширинного шрифта. Если с определенными символами возникают проблемы в Shell или редакторе, добавьте их в начало образца и попробуйте изменить сначала размер, а затем шрифт.
На вкладке Выделения и ключи выберите встроенную или пользовательскую цветовую тему и набор ключей. Чтобы использовать более новую встроенную цветовую тему или набор ключей в старых IDLE, сохраните ее как новую пользовательскую тему или набор ключей, и она будет доступна для старых IDLE.
IDLE на macOS¶
В разделе Системные настройки: Dock можно установить значение «Предпочитать вкладки при открытии документов» на «Всегда». Эта настройка не совместима с графическим интерфейсом tk/tkinter, используемым IDLE, и ломает несколько функций IDLE.
Расширения¶
IDLE содержит средства расширения. Предпочтения для расширений можно изменить с помощью вкладки Extensions диалогового окна предпочтений. Дополнительную информацию смотрите в начале файла config-extensions.def в каталоге idlelib. Единственным текущим расширением по умолчанию является zzdummy, пример которого также используется для тестирования.
idlelib¶
Исходный код: Lib/idlelib.
Пакет Lib/idlelib реализует приложение IDLE. О том, как использовать IDLE, читайте на остальной части этой страницы.
Файлы в idlelib описаны в idlelib/README.txt. Доступ к нему можно получить либо в idlelib, либо нажав Help => About IDLE в меню IDLE. Этот файл также сопоставляет пункты меню IDLE с кодом, который реализует этот пункт. За исключением файлов, перечисленных в разделе „Startup“, код idlelib является „приватным“ в том смысле, что изменения функций могут быть перенесены обратно (см. PEP 434).