Python 3.11.3 · Pyodide 0.29.3 · WebAssembly

Технічний огляд

Як Pyroom запускає Python у браузері — середовище виконання, архітектура, підтримувані API та доступні пакети.

Середовище виконання Python

Версія Python
3.11.3
CPython — повна специфікація мови
Рушій виконання
Pyodide 0.29.3
CPython, скомпільований у WebAssembly
Потік виконання
Web Worker
Без блокування — інтерфейс залишається чуйним

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) недоступні в браузері

Архітектура

Python виконується повністю у браузері — жодного сервера. Середовище виконання ізольоване від редактора, тому інтерфейс залишається чуйним навіть під час важких обчислень.

На iOS та iPadOS доступні ті самі функції, хоча продуктивність може дещо відрізнятися порівняно з настільними браузерами.

Технологічний стек AI Assistant (експериментально)

Примітка: AI Assistant є експериментальною функцією. Якість відповіді, швидкість і доступність моделі можуть відрізнятися залежно від класу пристрою, браузера та обмежень пам'яті.
Бібліотека
@huggingface/transformers
Transformers.js — працює у браузері через ONNX Runtime Web
Бекенд інференсу
ONNX Runtime Web
WebAssembly бекенд; fallback-типи точності для слабших пристроїв
Офлайн-підтримка
Кеш браузера
Моделі кешуються після першого завантаження; доступні в офлайн-сценаріях
  • Шар пояснення: браузерний пайплайн генерації тексту для пояснення коду та помилок
  • Шар перекладу: ONNX-пайплайни перекладу для обраних мов виводу (EN, UA, ES, DE, FR)
  • Режим виконання: пайплайн працює на бекенді wasm; fallback-типи точності покращують сумісність на слабших пристроях
  • Fallback-механізми: якщо модель не вдається завантажити, Pyroom використовує евристичні пояснення, щоб помічник залишався доступним

Власна реалізація Tkinter

Примітка: Pyroom не використовує реальний модуль 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, Canvas
  • Listbox, Scrollbar, Scale, Checkbutton, Radiobutton
  • Menu, 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 використовує асинхронні модальні діалоги DOM (не блокуючі, як на десктопі)
  • filedialog використовує діалог 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()

Редактор Monaco

Pyroom використовує Monaco Editor — той самий редактор, що лежить в основі VS Code — для редагування коду.

  • Підсвічування синтаксису Python
  • Автодоповнення та IntelliSense для вбудованих функцій Python
  • Скасування / повторення дій (undo / redo)
  • Налаштовуваний розмір шрифту та тема (темна / світла / авто)

Доступні пакети

Pyodide постачається з великим набором наукових, аналітичних та допоміжних пакетів, які можна імпортувати напряму. Пакети завантажуються на вимогу при першому імпорті, або їх можна попередньо завантажити через Налаштування бібліотек у середовищі Pyroom.

Повний список: pyodide.org → Пакети в Pyodide

Наукові та математичні

numpyscipysympympmathstatsmodelsautograduncertaintiesiminuitnlopt

Дані та таблиці

pandaspyarrowxarrayfastparquetxlrdpython-calamine

Візуалізація

matplotlibbokehaltairPillowimageiowordcloudsvgwrite

Машинне навчання

scikit-learnlightgbmxgboostriver

Мережа та HTTP

requestshttpxaiohttppyodide-http

Парсинг та текст

beautifulsoup4lxmlnltkregexpyparsing

Графи та мережі

networkxigraphrustworkx

Серіалізація

pyyamlmsgpackorjsonujsonprotobufcryptography

Встановлення пакетів не зі списку

Пакети, яких немає в Pyodide, можна встановити під час виконання за допомогою micropip (чисті Python-пакети з PyPI):

import micropip
await micropip.install("назва-пакету")

Доступність і підтримка шрифтів

Pyroom підтримує пресети шрифтів, орієнтовані на комфорт читання, на сайті та в інтерфейсі Playground. Доступні варіанти: стандартний UI-шрифт, Lexend, OpenDyslexic та режим збільшеного тексту.

  • Вибір шрифту доступний у верхній панелі навігації та застосовується миттєво без перезавантаження сторінки
  • Налаштування зберігаються в localStorage і синхронізуються зі спільним ключем профілю доступності (pyroom:accessibility-profile)
  • Типографіка сайту побудована на CSS-змінних, тому сімейство шрифту та базовий розмір можна перемикати глобально, зберігаючи компактну й стабільну навігацію
  • Для Lexend і OpenDyslexic використовуються локально вбудовані файли шрифтів, щоб не залежати від сторонніх CDN для пресетів доступності