Технічний огляд
Як Pyroom запускає Python у браузері — середовище виконання, архітектура, підтримувані API та доступні пакети.
Середовище виконання Python
Pyroom використовує Pyodide — порт CPython до WebAssembly — для запуску Python повністю в браузері. Жоден сервер не виконує ваш код. Усе працює локально у вкладці браузера через окремий робочий потік (Web Worker).
Стандартна бібліотека Python доступна повністю: math, random, datetime, json, re, collections, itertools, functools, io, sys, os.path, dataclasses, typing, enum, pathlib та інші.
- Потоки (
threading,multiprocessing) не підтримуються — WebAssembly є однопотоковим - Реальний доступ до файлової системи недоступний —
os.listdir, відкриття/запис файлів ізольовані - Сирі мережеві сокети (
socket) недоступні в браузері
Архітектура
Pyroom використовує двопотокову модель, щоб інтерфейс залишався швидким під час виконання Python. Середовище виконання Python запускається у окремому робочому потоці (Web Worker), який спілкується з основним потоком інтерфейсу через повідомлення та SharedArrayBuffer для синхронних викликів (необхідно для відображення Tkinter і Turtle).
На iOS та iPadOS SharedArrayBuffer недоступний, тому Pyroom переходить до запуску Python в основному потоці. Tkinter і Turtle продовжують працювати, але інтерфейс може реагувати повільніше під час виконання.
Заголовки Cross-Origin Isolation (COOP + COEP) необхідні для доступу до SharedArrayBuffer. Pyroom налаштовує їх на серверному розгортанні.
Власна реалізація Tkinter
tkinter. Замість цього постачається власний Python-shim, який відображає виклики Tkinter API на операції з DOM браузера.
Стандартний tkinter побудований поверх Tcl/Tk — десктопного GUI-тулкіту, який не може працювати в браузері. Pyroom реалізує шар сумісності з Tkinter, що складається з двох частин:
- Рівень Python — модуль
tkinter, написаний на Python, який перехоплює створення віджетів та виклики методів, передаючи їх через міст JavaScript - Рендерер інтерфейсу — модуль TypeScript в основному потоці, який перетворює операції з віджетами на реальні елементи DOM, що відображаються в панелі перегляду
Підтримуваний Tkinter API:
Tk(),mainloop(),title(),geometry()Button,Label,Entry,Frame,Text,CanvasListbox,Scrollbar,Scale,Checkbutton,RadiobuttonMenu,menu.add_command(),menu.add_cascade(),menu.add_separator()messagebox.showinfo(),showwarning(),showerror(),askyesno(),askokcancel()filedialog.askopenfilename(),filedialog.asksaveasfilename()(на основі prompt браузера).pack(),.grid(row, column, columnspan, rowspan),.place(x, y, width, height).config()/.configure(),.cget(),.bind(),.focus_set()StringVar,IntVar,BooleanVar,.get()/.set()after(ms, callback),after_cancel()
Відомі обмеження порівняно з десктопним Tkinter:
- Розширене оформлення віджетів, власні шрифти та растрові зображення мають обмежену підтримку
messageboxвикористовує діалогові вікна браузераalertтаconfirmfiledialogвикористовує діалогpromptбраузера — без реального вибору файлів- Полотно (Canvas): дуги, зображення та растрові елементи не реалізовані
- Додаткові вікна (Toplevel) не підтримуються
Черепаша графіка (Turtle)
Аналогічно до Tkinter, Pyroom замінює стандартний модуль turtle власною реалізацією, яка відображає команди малювання на полотно SVG у панелі перегляду.
- Усі стандартні команди руху:
forward(),backward(),left(),right(),goto(),setx(),sety() - Керування пером:
penup(),pendown(),pencolor(),pensize(),speed() - Заливка:
begin_fill(),end_fill(),fillcolor() - Допоміжні:
circle(),dot(),write(),clear(),reset() - Екран:
bgcolor(),title(),screensize()
Доступні пакети
Pyodide постачається з великим набором наукових, аналітичних та допоміжних пакетів, які можна імпортувати напряму. Пакети завантажуються на вимогу при першому імпорті, або їх можна попередньо завантажити через Налаштування бібліотек у середовищі Pyroom.
Повний список: pyodide.org → Пакети в Pyodide
Наукові та математичні
Дані та таблиці
Візуалізація
Машинне навчання
Мережа та HTTP
Парсинг та текст
Графи та мережі
Серіалізація
Встановлення пакетів не зі списку
Пакети, яких немає в Pyodide, можна встановити під час виконання за допомогою micropip (чисті Python-пакети з PyPI):
import micropip
await micropip.install("назва-пакету")
Редактор
Pyroom використовує Monaco Editor — той самий редактор, що лежить в основі VS Code. Він забезпечує:
- Підсвічування синтаксису Python
- Автодоповнення та IntelliSense для вбудованих функцій Python
- Скасування / повторення дій (undo / redo)
- Налаштовуваний розмір шрифту та тема (темна / світла / авто)