Learning Platform
Глоссарий Troubleshooting
Урок 01.03 · 10 мин
Начальный
PyodideWASMСтандартная библиотека

Среда: Pyodide в браузере и её ограничения

Code challenges в курсе работают на Pyodide — порте CPython в WebAssembly, исполняемом прямо в браузерном Web Worker’е. Это даёт нам почти полный Python без установки на машину пользователя, но снимает то, что зависит от ресурсов операционной системы.

Этот урок — карта окружения: что работает, что не работает, и как мы обходим ограничения через mock-данные и io.StringIO.


Что работает

Pyodide включает большую часть stdlib. Вот safe-subset, который мы используем в challenges (с ним вы точно не упрётесь в ModuleNotFoundError):

Pyodide stdlib subset — безопасно для challenges
Числа и математикаmath, decimal, ...math (тригонометрия, log, sqrt), cmath (комплексные), decimal (arbitrary precision Decimal), fractions (Fraction), statistics (mean/median/stdev), random (псевдослучайные).
Текст и binaryre, json, csv, io, ...string (константы, форматтеры), re (regex), json (parse/dump), csv (reader/writer), io (StringIO/BytesIO), hashlib (sha256, md5), struct (binary pack/unpack), array (typed arrays), base64.
Структуры и алгоритмыcollections, itertools, ...collections (deque, defaultdict, Counter, OrderedDict), itertools (chain, groupby, combinations, accumulate), functools (reduce, lru_cache, partial), operator (itemgetter, attrgetter), heapq (priority queue), bisect (binary search вставки).
Метапрограммированиеdis, inspect, ...dis (байткод), inspect (signature, source), gc (garbage collector), weakref (слабые ссылки), typing (Union, Optional, Protocol — для type hints), dataclasses (@dataclass), enum (Enum).

Этот список — не исчерпывающий, а минимальный набор, который точно стабилен в Pyodide и используется в курсе. Полная taxonomy stdlib — в Python docs, но если модуля нет в этом списке, перед использованием в challenge стоит проверить.


Что НЕ работает (или работает иначе)

WASM sandbox — это не полный Linux: нет процессов, нет TCP/UDP сокетов, нет real OS threads. Список модулей, которые валидатор validate-allowed-imports блокирует автоматически (попытка import вызовет FAIL):

  • subprocess, os.system, os.fork — нет OS processes в WASM, форкать нечего
  • socket, urllib.request, requests, aiohttp — нет TCP/UDP в browser sandbox
  • multiprocessing, threading (с shared mutable state) — нет real OS threads
  • tkinter — нет display
  • sqlite3 — отсутствует в стандартной Pyodide build (опционально через separate package)
  • ctypes — частично (нет dlopen для системных библиотек)
  • signal — semantics отличается от CPython, ненадёжно
  • Bare open('/etc/passwd') — virtual FS работает, но мы используем io.StringIO для портативности challenges (см. ниже)
WARNING

Если challenge требует одного из «не работает» — это будет отмечено в условии задачи прямо: тема преподаётся conceptual только, без runnable кода. Например, asyncio объясняется через диаграммы и pseudo-code, но не запускается в браузере.


Что мы делаем вместо

Когда учебник говорит «прочитай файл» или «сделай HTTP-запрос», в браузере мы используем mock через io.StringIO или заранее заданный JSON-литерал. Это не дидактический компромисс: те же конструкции применимы к real-world коду — csv.reader принимает любой iterator строк, не только file-объект.

ХочетсяВ Pyodide делаем
HTTP requestMock через io.StringIO с заранее заданным JSON-литералом
Чтение CSV-файлаio.StringIO("col1,col2\n1,2\n3,4") подаётся в csv.reader
ПараллелизмConceptual урок про concurrent.futures API, без real spawning
Long-running tasktimeoutMs ≤ 15 000 ms; компактные тестовые входы (N ≤ 10⁴)
Запись на дискio.StringIO для сборки результата + getvalue() для проверки

Когда нужно покинуть браузер

Pyodide прекрасен для большинства DSA-уроков, но есть темы, где WASM ограничивает или искажает поведение. В таких уроках появится callout «Run on Your Machine» с указанием установить локальный CPython 3.13 параллельно.

TIP

Run-on-Your-Machine callouts появятся в M11 (Logging / Monitoring), M12 (Performance Profiling), M13 (Packaging). Для memory profiling через tracemalloc с большими буферами, real subprocess через subprocess.run, real network — устанавливайте локальный Python 3.13 и работайте параллельно. Все примеры воспроизводимы в обоих окружениях.


Ключевые выводы

  1. Pyodide = CPython в WASM = почти весь stdlib минус OS-зависимое
  2. Forbidden imports список зафиксирован валидатором validate-allowed-imports.cjs — попытка import socket в challenge вызовет FAIL до отправки на сервер
  3. Run-on-Your-Machine callouts — для тех мест, где WASM ограничивает: вы устанавливаете локальный CPython 3.13 и проходите параллельно

Проверьте понимание

Результат: 0 из 0
Прикладной
Вопрос 1 из 4. Какой из этих imports НЕ будет работать в Pyodide-based code challenge (валидатор `validate-allowed-imports` его блокирует)?

Закончили урок?

Отметьте его как пройденный, чтобы отслеживать свой прогресс

Войдите чтобы оценить урок

Прогресс модуля
0 из 4