IDLE¶
Источник: Lib/idlelib/
IDLE - это интегрированная среда разработки и обучения Python.
IDLE имеет следующие особенности:
Кроссплатформенность: в основном одинаково работает в Windows, Unix и macOS
Окно оболочки Python (интерактивный интерпретатор) с цветовым оформлением ввода, вывода кода и сообщений об ошибках
Многооконный текстовый редактор с многократной отменой, раскраской Python, умным отступом, подсказками, автозавершением и другими функциями
поиск в любом окне, замена в окнах редактора и поиск в нескольких файлах (grep)
Отладчик с постоянными точками останова, шагами и просмотром глобальных и локальных пространств имен
конфигурация, браузеры и другие диалоговые окна
Запуск и выполнение кода¶
При запуске с опцией -s
IDLE выполнит файл, на который ссылаются переменные окружения IDLESTARTUP
или PYTHONSTARTUP
. Сначала IDLE проверяет наличие IDLESTARTUP
; если 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 GUI и процессом выполнения пользовательского кода. Соединение должно устанавливаться при каждом запуске или перезапуске оболочки. (Последнее обозначается разделительной линией с надписью „RESTART“). Если пользовательскому процессу не удается установить соединение с процессом GUI, он обычно выводит окно ошибки Tk
с сообщением „cannot connect“, которое направляет пользователя сюда. Затем он выходит из программы.
Одна из специфических проблем с соединением в 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
объектами, которые получают входные данные и отправляют выходные данные в окно оболочки. Исходные значения, хранящиеся в 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) 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 кодовые точки заменены на коды экранирования. Как было показано выше, это позволяет идентифицировать символы в строке, независимо от того, как они отображаются.
Нормальный вывод и вывод ошибок обычно хранятся отдельно (на отдельных строках) от ввода кода и друг от друга. Они выделяются разными цветами.
Для трассировок 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).