IDLE¶
Вихідний код: Lib/idlelib/
IDLE — це інтегроване середовище розробки та навчання Python.
IDLE має такі особливості:
coded in 100% pure Python, using the
tkinter
GUI toolkitкросплатформенність: працює майже однаково на Windows, Unix і macOS
Вікно оболонки Python (інтерактивний інтерпретатор) із розфарбуванням введення, виведення коду та повідомлень про помилки
багатовіконний текстовий редактор із множинним скасуванням, розфарбовуванням Python, розумним відступом, підказками щодо виклику, автозавершенням та іншими функціями
пошук у будь-якому вікні, заміна у вікнах редактора та пошук у кількох файлах (grep)
налагоджувач із постійними точками зупинки, кроками та переглядом глобальних і локальних просторів імен
налаштування, браузери та інші діалоги
Startup and code execution¶
Після запуску з опцією -s
IDLE виконає файл, на який посилаються змінні середовища IDLESTARTUP
або PYTHONSTARTUP
. IDLE спочатку перевіряє IDLESTARTUP
; якщо IDLESTARTUP
присутній, запускається файл, на який посилається. Якщо IDLESTARTUP
відсутній, IDLE перевіряє PYTHONSTARTUP
. Файли, на які посилаються ці змінні середовища, є зручними місцями для зберігання функцій, які часто використовуються з оболонки IDLE, або для виконання операторів імпорту для імпорту загальних модулів.
Крім того, Tk
також завантажує файл запуску, якщо він присутній. Зауважте, що файл Tk завантажується без умов. Цей додатковий файл має назву .Idle.py
і його шукають у домашньому каталозі користувача. Інструкції в цьому файлі виконуватимуться в просторі імен Tk, тому цей файл не корисний для імпорту функцій, які будуть використовуватися з оболонки IDLE Python.
Використання командного рядка¶
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 і процесом виконання коду користувача. Під час кожного запуску або перезапуску оболонки потрібно встановлювати з’єднання. (Останнє позначається розділювальною лінією з написом «ПЕРЕЗАПУСТИТИ»). Якщо процесу користувача не вдається підключитися до процесу графічного інтерфейсу, він зазвичай відображає вікно помилки 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
(див. Про 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’s standard stream replacements are not inherited by subprocesses
created in the execution process, whether directly by user code or by
modules such as multiprocessing. If such subprocess use input
from
sys.stdin or print
or write
to sys.stdout or sys.stderr,
IDLE should be started in a command line window. The secondary subprocess
will then be attached to that window for input and output.
Якщо 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 можна закоментувати виклик основного циклу. Після цього користувач одразу отримує підказку оболонки та може взаємодіяти з живою програмою. Треба лише не забувати знову ввімкнути виклик основного циклу під час роботи на стандартному Python.
Запуск без підпроцесу¶
By default, IDLE executes user code in a separate subprocess via a socket, which uses the internal loopback interface. This connection is not externally visible and no data is sent to or received from the Internet. If firewall software complains anyway, you can ignore it.
Якщо спроба підключитися до сокета не вдається, Idle повідомить вас. Такі збої іноді тимчасові, але якщо вони постійні, проблемою може бути брандмауер, який блокує з’єднання, або неправильна конфігурація певної системи. Поки проблему не буде вирішено, можна запускати Idle з перемикачем командного рядка -n.
Якщо IDLE запущено з параметром командного рядка -n, він виконуватиметься в одному процесі та не створюватиме підпроцес, який запускає сервер виконання RPC Python. Це може бути корисним, якщо Python не може створити підпроцес або інтерфейс сокета RPC на вашій платформі. Однак у цьому режимі код користувача не ізольований від самого IDLE. Крім того, середовище не перезапускається, якщо вибрано Run/Run Module (F5). Якщо ваш код було змінено, ви повинні reload() відповідні модулі та повторно імпортувати будь-які конкретні елементи (наприклад, з foo import baz), щоб зміни набули чинності. З цих причин бажано запускати IDLE із підпроцесом за замовчуванням, якщо це взагалі можливо.
Застаріло починаючи з версії 3.4.
Help and preferences¶
Довідкові джерела¶
Пункт меню «Довідка» «Довідка IDLE» відображає відформатовану html-версію розділу IDLE довідника бібліотеки. Результат у текстовому вікні tkinter, доступному лише для читання, близький до того, що можна побачити у веб-браузері. Переміщайтеся по тексту за допомогою коліщатка миші, смуги прокручування або натиснутих клавіш зі стрілками вгору та вниз. Або натисніть кнопку Зміст (Зміст) і виберіть заголовок розділу у вікні, що відкриється.
Пункт меню «Довідка» «Документи Python» відкриває обширні джерела довідки, включаючи навчальні посібники, доступні за адресою docs.python.org/x.y
, де «x.y» — поточна версія Python. Якщо у вашій системі є офлайнова копія документів (це може бути варіант інсталяції), вона буде відкрита натомість.
Вибрані URL-адреси можна будь-коли додати або видалити з меню довідки за допомогою вкладки «Загальні» діалогового вікна «Налаштувати IDLE».
Встановлення налаштувань¶
Параметри шрифту, підсвічування, клавіші та загальні параметри можна змінити за допомогою Configure IDLE у меню Option. Параметри користувача, відмінні від стандартних, зберігаються в каталозі .idlerc
у домашньому каталозі користувача. Проблеми, спричинені неправильними конфігураційними файлами користувача, вирішуються редагуванням або видаленням одного чи кількох файлів у .idlerc
.
На вкладці «Шрифт» перегляньте зразок тексту, щоб дізнатися про вплив накреслення та розміру шрифту на кілька символів різними мовами. Відредагуйте зразок, щоб додати інших персонажів, які вас цікавлять. Використовуйте зразок для вибору моноширинних шрифтів. Якщо певні символи мають проблеми в Shell або редакторі, додайте їх у верхній частині зразка та спробуйте змінити спочатку розмір, а потім шрифт.
На вкладці «Висвітлення та ключі» виберіть вбудовану або спеціальну колірну тему та набір ключів. Щоб використовувати новішу вбудовану колірну тему або набір ключів зі старішими IDLE, збережіть їх як нову спеціальну тему або набір ключів, щоб вони були доступні для старіших IDLE.
IDLE на macOS¶
У розділі «Системні параметри: Док» можна встановити «Надавати перевагу вкладкам під час відкриття документів» на «Завжди». Цей параметр несумісний із фреймворком графічного інтерфейсу tk/tkinter, який використовується IDLE, і порушує роботу кількох функцій IDLE.
Розширення¶
IDLE містить можливість розширення. Налаштування для розширень можна змінити на вкладці Розширення діалогового вікна налаштувань. Дивіться початок config-extensions.def у каталозі idlelib для отримання додаткової інформації. Єдиним поточним розширенням за замовчуванням є zzdummy, приклад також використовується для тестування.