праздный¶
Исходный код: Lib/idlelib/
IDLE - это интегрированная среда разработки и обучения на Python.
IDLE обладает следующими особенностями:
кроссплатформенность: работает в основном одинаково в Windows, Unix и macOS.
Окно оболочки Python (интерактивный интерпретатор) с раскрашиванием кода ввода, вывода и сообщений об ошибках
многооконный текстовый редактор с несколькими функциями отмены, раскрашивания на Python, smartindent, подсказками по вызову, автозавершением и другими функциями
поиск в любом окне, замена в окнах редактора и поиск по нескольким файлам (grep)
отладчик с постоянными точками останова, пошаговым управлением и просмотром глобального и локального пространств имен
настройка, браузеры и другие диалоговые окна
Запуск и выполнение кода¶
При запуске с параметром -s
IDLE запустит файл, на который ссылаются переменные среды IDLESTARTUP
или PYTHONSTARTUP
. IDLE сначала проверяет наличие IDLESTARTUP
; если присутствует IDLESTARTUP
, то запускается указанный файл. Если IDLESTARTUP
отсутствует, IDLE проверяет наличие PYTHONSTARTUP
. Файлы, на которые ссылаются эти переменные среды, являются удобными местами для хранения функций, которые часто используются в командной строке IDLE, или для выполнения инструкций import для импорта распространенных модулей.
Кроме того, 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 и процессом выполнения пользовательского кода. Соединение должно устанавливаться всякий раз, когда оболочка запускается или перезапускается. (Последнее обозначается разделительной линией с надписью «ПЕРЕЗАПУСК»). Если пользовательскому процессу не удается подключиться к процессу с графическим интерфейсом, он обычно отображает окно ошибки 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. Текущее исправление заключается в переименовании пользовательского файла.
Антивирусная программа или брандмауэр могут прерывать подключение, хотя и реже, чем в прошлом. Если программу нельзя научить разрешать подключение, ее необходимо отключить для работы в режиме ожидания. Разрешить это внутреннее подключение безопасно, поскольку данные на внешних портах не отображаются. Аналогичная проблема связана с неправильной конфигурацией сети, которая блокирует подключения.
Иногда возникают проблемы с установкой Python: могут возникать конфликты между несколькими версиями, или для одной установки может потребоваться доступ администратора. Если кто-то устраняет конфликт, не может или не хочет запускаться от имени администратора, может быть проще всего полностью удалить Python и начать все сначала.
Зомби pythonw.exe процесс может стать проблемой. В Windows используйте диспетчер задач, чтобы проверить его наличие и остановить, если оно есть. Иногда перезагрузка, инициированная сбоем программы или прерыванием работы клавиатуры (control-C), может привести к сбою подключения. Удаление окна с ошибкой или использование команды Перезапустить оболочку в меню оболочки может устранить временную проблему.
При первом запуске IDLE пытается прочитать файлы конфигурации пользователя в ~/.idlerc/
(~ - это домашний каталог пользователя). Если возникает проблема, должно появиться сообщение об ошибке. Не говоря уже о случайных сбоях в работе диска, этого можно избежать, если никогда не редактировать файлы вручную. Вместо этого воспользуйтесь диалоговым окном настройки в разделе Параметры. Если в файле пользовательской конфигурации обнаружена ошибка, лучшим решением может быть его удаление и запуск заново с помощью диалогового окна настроек.
Если IDLE завершает работу без сообщения и программа была запущена не с консоли, попробуйте запустить ее с консоли или терминала (python -m idlelib
) и посмотрите, не выдаст ли это сообщение об ошибке.
В системах на базе Unix с tcl/tk старше 8.6.11
(см. About IDLE
) определенные символы определенных шрифтов могут привести к сбою при отправке сообщения на терминал. Это может произойти либо при запуске 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
.
Отправка результатов печати из одного процесса в текстовый виджет в другом выполняется медленнее, чем печать на системном терминале в том же процессе. Это дает наибольший эффект при печати нескольких аргументов, поскольку строка для каждого аргумента, каждый разделитель и новая строка отправляются отдельно. Для разработки это обычно не проблема, но если вы хотите печатать быстрее в режиме ожидания, отформатируйте и объедините все, что вы хотите отобразить, вместе, а затем напечатайте одну строку. Как строки формата, так и str.join()
могут помочь объединить поля и строки.
Стандартные потоковые замены IDLE не наследуются подпроцессами, созданными в процессе выполнения, будь то непосредственно пользовательским кодом или модулями, такими как многопроцессорная обработка. Если такой подпроцесс использует input
из sys.stdin или print
или write
в sys.stdout или sys.stderr, IDLE должен быть запущен в окне командной строки. (В Windows используйте python
или py
вместо pythonw
или pyw
.) Затем к этому окну будет подключен дополнительный подпроцесс для ввода и вывода.
Если sys
сброшено с помощью пользовательского кода, например, с помощью importlib.reload(sys)
, изменения IDLE будут потеряны, и ввод с клавиатуры и вывод на экран будут работать неправильно.
Когда Shell находится в фокусе, она управляет клавиатурой и экраном. Обычно это прозрачно, но функции, которые напрямую обращаются к клавиатуре и экрану, работать не будут. К ним относятся системные функции, которые определяют, была ли нажата клавиша, и если да, то какая именно.
НЕЗАНЯТЫЙ код, выполняющийся в процессе выполнения, добавляет в стек вызовов кадры, которых в противном случае там не было бы. НЕЗАНЯТЫЙ код переносит sys.getrecursionlimit
и sys.setrecursionlimit
, чтобы уменьшить влияние дополнительных стековых кадров.
Когда пользовательский код вызывает SystemExit либо напрямую, либо путем вызова sys.exit, IDLE возвращается к командной строке вместо выхода.
Пользовательский вывод в оболочке¶
Когда программа выводит текст, результат определяется соответствующим устройством вывода. Когда IDLE выполняет пользовательский код, sys.stdout
и sys.stderr
подключаются к области отображения командной строки IDLE. Некоторые из его функций унаследованы от базового текстового виджета Tk. Другие являются запрограммированными дополнениями. Если это важно, Shell предназначен для разработки, а не для серийного производства.
Например, она никогда не выбрасывает выходные данные. Программа, которая отправляет неограниченное количество выходных данных в Shell, в конечном итоге заполняет память, что приводит к ошибке памяти. Напротив, в некоторых системных текстовых окнах сохраняются только последние n строк выходных данных. Консоль Windows, например, содержит настраиваемое пользователем количество строк от 1 до 9999, при этом по умолчанию используется значение 300.
Текстовый виджет Tk и, следовательно, оболочка 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, заменены escape-кодами. Как было продемонстрировано выше, это позволяет идентифицировать символы в строке независимо от того, как они отображаются.
Обычный вывод и вывод с ошибкой, как правило, хранятся отдельно (в отдельных строках) от ввода кода и друг от друга. Каждый из них выделяется разными цветами.
При трассировке синтаксических ошибок обычная пометка «^» в том месте, где была обнаружена ошибка, заменяется выделением текста с помощью выделения ошибки. Когда код, запущенный из файла, вызывает другие исключения, можно щелкнуть правой кнопкой мыши на строке трассировки, чтобы перейти к соответствующей строке в неактивном редакторе. При необходимости файл будет открыт.
В 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
или из неактивного редактора, приглашение командной строки >>>
не появляется до тех пор, пока не вернется mainloop()
, после чего не останется ничего, с чем можно было бы взаимодействовать.
При запуске программы tkinter из неактивного редактора можно закомментировать вызов mainloop. После этого пользователь сразу же получает приглашение shell и может взаимодействовать с действующим приложением. Просто нужно не забыть повторно включить вызов основного цикла при запуске на стандартном Python.
Запуск без подпроцесса¶
По умолчанию IDLE выполняет пользовательский код в отдельном подпроцессе через сокет, который использует внутренний интерфейс обратной связи. Это соединение не видно извне, и никакие данные не отправляются в Интернет и не принимаются из Интернета. Если брандмауэр все равно жалуется, вы можете проигнорировать это.
Если попытка установить соединение через сокет завершится неудачей, Idle уведомит вас об этом. Такие сбои иногда носят временный характер, но если они происходят постоянно, проблема может быть либо в брандмауэре, блокирующем подключение, либо в неправильной настройке конкретной системы. Пока проблема не устранена, можно запустить Idle с помощью переключателя командной строки.
Если IDLE запущен с помощью параметра командной строки, он будет выполняться в рамках одного процесса и не создаст подпроцесс, который запускает сервер выполнения RPC Python. Это может быть полезно, если Python не может создать подпроцесс или интерфейс сокета RPC на вашей платформе. Однако в этом режиме пользовательский код сам по себе не изолирован от IDLE. Кроме того, среда не перезапускается при выборе Run/Запустить модуль (F5). Если ваш код был изменен, вы должны перезагрузить() затронутые модули и повторно импортировать какие-либо конкретные элементы (например, из foo import baz), чтобы изменения вступили в силу. По этим причинам предпочтительнее запускать IDLE с подпроцессом по умолчанию, если это вообще возможно.
Не рекомендуется, начиная с версии 3.4.
Помощь и предпочтения¶
Источники справки¶
Пункт меню «Справка IDLE» отображает отформатированную html-версию главы IDLE из библиотечного справочника. Результат в текстовом окне tkinter, доступном только для чтения, близок к тому, что можно увидеть в веб-браузере. Перемещайтесь по тексту с помощью колесика мыши, полосы прокрутки или клавиш со стрелками вверх и вниз, удерживая нажатой клавишу. Или нажмите кнопку Оглавления и выберите заголовок раздела в открывшемся окне.
``docs.python.org/x.y``Пункт меню «Справка IDLE» отображает отформатированную html-версию главы IDLE из библиотечного справочника. Результат в текстовом окне tkinter, доступном только для чтения, близок к тому, что можно увидеть в веб-браузере. Перемещайтесь по тексту с помощью колесика мыши, полосы прокрутки или клавиш со стрелками вверх и вниз, удерживая нажатой клавишу. Или нажмите кнопку Оглавления и выберите заголовок раздела в открывшемся окне.
Пункт меню «Справка IDLE» отображает отформатированную html-версию главы IDLE из библиотечного справочника. Результат в текстовом окне tkinter, доступном только для чтения, близок к тому, что можно увидеть в веб-браузере. Перемещайтесь по тексту с помощью колесика мыши, полосы прокрутки или клавиш со стрелками вверх и вниз, удерживая нажатой клавишу. Или нажмите кнопку Оглавления и выберите заголовок раздела в открывшемся окне.
Настройка предпочтений¶
.idlerc``Настройка ``.idlerc
предпочтений
На вкладке Шрифт ознакомьтесь с образцом текста, чтобы узнать, как начертание и размер шрифта влияют на несколько символов на разных языках. Отредактируйте образец, чтобы добавить другие символы, представляющие личный интерес. Используйте образец для выбора моноширинных шрифтов. Если с определенными символами возникают проблемы в оболочке или редакторе, добавьте их в начало примера и попробуйте изменить сначала размер, а затем шрифт.
На вкладке Основные моменты и клавиши выберите встроенную или пользовательскую цветовую тему и набор клавиш. Чтобы использовать более новую встроенную цветовую тему или набор клавиш со старыми IDLE, сохраните ее как новую пользовательскую тему или набор клавиш, и она будет доступна для старых IDLE.
ПРОСТОЙ в macOS¶
В разделе Системные настройки: Dock можно установить для параметра «Предпочитать вкладки при открытии документов» значение «Всегда». Этот параметр несовместим с графическим интерфейсом tk/tkinter, используемым IDLE, и нарушает некоторые функции IDLE.
В разделе Системные настройки: Dock можно установить для параметра «Предпочитать вкладки при открытии документов» значение «Всегда». Этот параметр несовместим с графическим интерфейсом tk/tkinter, используемым IDLE, и нарушает некоторые функции IDLE.¶
В разделе Системные настройки: Dock можно установить для параметра «Предпочитать вкладки при открытии документов» значение «Всегда». Этот параметр несовместим с графическим интерфейсом tk/tkinter, используемым IDLE, и нарушает некоторые функции IDLE.
В разделе Системные настройки: Dock можно установить для параметра «Предпочитать вкладки при открытии документов» значение «Всегда». Этот параметр несовместим с графическим интерфейсом tk/tkinter, используемым IDLE, и нарушает некоторые функции IDLE.¶
Исходный код: Lib/idlelib
Пакет Lib/idlelib реализует приложение IDLE. Как использовать IDLE, смотрите в остальной части этой страницы.
Файлы в idlelib описаны в разделе idlelib/README.txt. Откройте его либо в idlelib, либо нажмите «Справка» => «О IDLE» в меню IDLE. Этот файл также сопоставляет элементы меню IDLE с кодом, который реализует этот элемент. За исключением файлов, перечисленных в разделе «Запуск», код idlelib является «закрытым» в том смысле, что изменения функций могут быть перенесены обратно (см. PEP 434).