Python
April 4

Реализации Python — от CPython до браузера

1. CPython — стандартная реализация Python

  1. Введение: что такое CPython и почему это "дефолт"
  2. От исходного кода до байткода: пайплайн выполнения
  3. Как работает интерпретатор (eval loop)
  4. Роль GIL (Global Interpreter Lock)
  5. Как устроена память и сборка мусора
  6. Примеры из dis и inspect
  7. Заключение: плюсы, минусы, где использовать

2. PyPy — быстрый Python с JIT-компилятором

  1. Что такое PyPy и зачем он нужен
  2. Что такое JIT-компиляция и как она работает
  3. Сравнение производительности с CPython
  4. Ограничения и совместимость
  5. Примеры ускорения на практике
  6. Когда использовать PyPy

3. MicroPython — Python на микроконтроллерах

  1. Зачем нужен Python на микроконтроллерах
  2. Архитектура MicroPython
  3. Поддерживаемые устройства (ESP32, STM32, и т.д.)
  4. Отличия от CPython (например, отсутствие asyncio)
  5. Примеры: управление светодиодами, сенсорами
  6. Когда и зачем использовать MicroPython

4. CircuitPython — Python для электроники и обучения

  1. Откуда взялся CircuitPython
  2. Отличия от MicroPython
  3. Поддерживаемые платы и экосистема Adafruit
  4. Особенности: работа с USB, простота
  5. Пример: «Hello, LED!» с CircuitPython
  6. Для кого подходит

5. Jython — Python на Java

  1. Что такое Jython и где используется
  2. Преимущества: доступ к Java-библиотекам
  3. Ограничения: отсутствие Python 3, GIL
  4. Установка и пример использования
  5. Когда Jython оправдан

6. IronPython — Python на .NET

  1. Что такое IronPython
  2. Примеры использования с .NET-библиотеками
  3. Совместимость с CPython
  4. Ограничения и статус проекта
  5. Для чего подходит

7. Stackless Python — Python без стека?

  1. Зачем нужен Stackless
  2. Микропотоки и как они работают
  3. Примеры и преимущества
  4. Почему не стал мейнстримом
  5. Где может быть полезен

8. Brython — Python в браузере

  1. Что такое Brython и зачем он нужен
  2. Как работает (transpile в JavaScript)
  3. Ограничения и особенности
  4. Примеры: интерактивная веб-страница на Python
  5. Альтернативы и сравнение

9. Transcrypt — Python как замена JavaScript

  1. Что такое Transcrypt
  2. Преимущества: типизация, модульность
  3. Как устроена трансляция в JS
  4. Пример веб-приложения
  5. Сравнение с Brython

10. Nuitka — компиляция Python в C++

  1. Что делает Nuitka
  2. Поддержка Python 3.x и библиотек
  3. Пример: компиляция скрипта в exe
  4. Производительность и обфускация
  5. Когда стоит использовать

🐍 CPython — как работает "стандартный" Python

Когда мы говорим "Python", чаще всего имеем в виду CPython — основную и официальную реализацию языка программирования Python. Она написана на языке C и именно она запускается при вводе команды python в терминале на большинстве компьютеров.

Разберёмся, как устроена эта реализация изнутри, и что происходит, когда мы запускаем Python-код.


🔧 Что такое CPython?

CPython — это:

  • Интерпретатор Python-кода (то есть исполняет его напрямую),
  • Компилятор из Python в байткод (внутреннее представление),
  • Среда выполнения (выполняет байткод и управляет памятью, потоками и т.д.).

Эта реализация разрабатывается официальной командой Python и служит эталоном для других реализаций.


🔁 Как работает выполнение кода

CPython проходит несколько этапов при запуске Python-кода:

  1. Парсинг
    Исходный код (например, script.py) превращается в дерево разбора (AST).
  2. Компиляция в байткод
    AST компилируется в байткод — инструкции, понятные интерпретатору CPython.
  3. Выполнение байткода
    Байткод исполняется специальной машиной — eval loop — интерпретатором, написанным на C.

Пример байткода можно увидеть с помощью модуля dis:

import dis

def hello():
    print("Привет, Python!")

dis.dis(hello)

🔄 Eval loop и байткод

"Сердце" CPython — это интерпретационный цикл (ceval.c). Он читает байткод построчно, интерпретирует команды (LOAD_CONST, CALL_FUNCTION, и т.д.) и выполняет нужные действия на C-уровне.

Каждое выражение Python (даже простое x = 1) превращается в последовательность таких инструкций. Именно они исполняются во время работы программы.

Байткод — это как секретный язык котов. Вы пишете print("мяу"), а интерпретатор понимает это как серию непонятных "мяу"-команд (LOAD_CONST, CALL_FUNCTION и т.д.).
Только CPython знает, как на них правильно реагировать.

🔒 GIL — Global Interpreter Lock

CPython использует глобальную блокировку интерпретатора (GIL) — механизм, который позволяет только одному потоку выполнять байткод в конкретный момент времени.

Это:

  • Обеспечивает безопасность доступа к памяти,
  • Но ограничивает многопоточность на уровне CPU.

Поэтому для параллельных задач в Python чаще используют многопроцессность (multiprocessing) или асинхронность (asyncio).

GIL — это как кот, который лёг на клавиатуру и не пускает других пользователей:
«Сначала я — потом, может быть, кто-то ещё». Даже если вас 8, он говорит: «Мяу. Жди».

🧹 Управление памятью и сборка мусора

CPython использует:

  • Счётчик ссылок — как только на объект не ссылается ни одна переменная, он удаляется,
  • Циклический сборщик мусора — на случай, если есть циклы ссылок.

Эта система проста и понятна, но в редких случаях может приводить к утечкам памяти, если забывать об очищении ресурсов.

В CPython есть "счётчик ссылок": если на объект больше никто не смотрит — он отправляется «в мусорный лоток».
А если объекты ссылаются друг на друга? Тут уже нужен настоящий уборщик, который зачищает сложные «мусорные клубки».

✅ Плюсы и минусы CPython

Плюсы:

  • Стандартизированная реализация,
  • Большая экосистема библиотек (всё ориентировано на CPython),
  • Хорошая совместимость и поддержка.

Минусы:

  • Невысокая производительность по сравнению с JIT-интерпретаторами (например, PyPy),
  • GIL ограничивает использование многопоточности на многоядерных системах.

🧠 Заключение

CPython — это основа всего Python-мироздания. Он прост в использовании, понятен в изучении и максимально стабилен. Если вы пишете на Python — почти наверняка вы используете именно CPython.

Но понимание его внутренних механизмов — от байткода до GIL — даёт вам реальное преимущество. Вы начинаете думать как интерпретатор, писать более эффективный код и лучше понимать ограничения.


🚀 PyPy — быстрый Python (почти как кот, увидевший открытый холодильник)

Python часто ругают за медлительность. Но что, если бы у нас был Python, который думает быстрее, не тормозит и вообще летает?
Такой Python существует — и зовут его PyPy.


🐾 Что такое PyPy?

PyPy — это реализация Python, написанная на подмножестве Python (RPython), которая использует JIT-компиляцию для ускорения работы кода.

RPython (Restricted Python) — это ограниченная версия Python, на которой написан сам PyPy.
Она проста для анализа и может быть скомпилирована в C, что позволяет создавать быстрые интерпретаторы. RPython — это как строго воспитанный кот: делает только то, что ему разрешено, но зато быстро и предсказуемо 🐈‍⬛

JIT = Just-In-Time = «прямо во время выполнения». Он компилирует горячие участки кода в машинные инструкции на лету, что делает их намного быстрее.

CPython — это кот, который сначала смотрит, потом думает, потом идёт.
PyPy — кот, который сразу мчится, если видел это движение уже сто раз.

🧠 Как работает JIT?

В отличие от CPython, который всегда интерпретирует байткод, PyPy анализирует, какие участки кода повторяются, и превращает их в нативный машинный код. То есть, буквально:

  1. Сначала код выполняется "по-старинке".
  2. PyPy замечает, что вы вызываете одну и ту же функцию 1000 раз.
  3. Он компилирует её в машинный код.
  4. Следующие вызовы — летят.

📊 Насколько быстрее?

В среднем — в 4–10 раз быстрее, особенно на числовом коде, алгоритмах и долгих циклах.
Простой пример: на PyPy сортировка больших списков или вычисление чисел Фибоначчи происходит значительно быстрее, чем в CPython.


🧪 Пример сравнения

import time

def slow_fib(n):
    if n < 2:
        return n
    return slow_fib(n-1) + slow_fib(n-2)

start = time.time()
print(slow_fib(30))
print("Время:", time.time() - start)

На CPython: 0.4–0.6 секунд
На PyPy: 0.05–0.1 секунд

Почувствуйте разницу: кот с GIL и кот с турбонаддувом 😼

😼 Совместимость и ограничения

  • PyPy почти полностью совместим с Python 3 (особенно 3.9–3.10).
  • Работает с большинством библиотек, если они не используют C-расширения.
  • numpy, pandas и другие нативные модули могут вести себя по-разному (хотя есть поддержка через micronumpy).

⚠️ Когда PyPy — не лучший выбор?

  • Если вы используете много библиотек с C-интерфейсами (например, scipy),
  • Если вам нужен максимальный контроль над GIL или памятью,
  • Если ваш скрипт запускается один раз и сразу завершается (JIT не успевает разогнаться).
PyPy — это как кот, который сначала лениво наблюдает, а потом, научившись, начинает прыгать точно, быстро и с идеальным расчётом. Он медленно стартует, но потом не остановить!

✅ Вывод

Если ваш код долго работает, активно использует циклы или обрабатывает большие объёмы данных — PyPy может подарить вам ускорение без переписывания кода.

Это как заменить сонного кота на реактивного тигра… всё ещё пушистого, но намного шустрее 😸

🧩 MicroPython — когда Python помещается в карман (и на микроконтроллер)

Python — это удобно, читаемо и приятно. А что если запускать его не на компьютере, а... на плате размером с ноготь?
В этом и есть магия MicroPython — версии Python, которая живёт внутри микроконтроллеров.


🔧 Что такое MicroPython?

MicroPython — это реализация Python 3, написанная с нуля на C, чтобы работать на устройствах с:

  • очень маленьким объёмом памяти (от 256 КБ),
  • низким энергопотреблением,
  • отсутствием полноценной ОС.

Он поддерживает большинство базовых возможностей Python: переменные, функции, классы, try/except, списки, словари и даже async.

🐱 Сравнение:
CPython — это кот-домосед на диване с 16 ГБ RAM.
А MicroPython — уличный кот-экстремал, который живёт в 256 КБ и управляет светодиодами.

🧠 Как он работает?

Внутри платы (например, ESP32, STM32 или Raspberry Pi Pico):

  1. Вы загружаете прошивку MicroPython.
  2. Подключаетесь через USB или Wi-Fi.
  3. Пишете Python-код прямо в текстовом редакторе.
  4. Котик-микроконтроллер исполняет команды в реальном времени: мигает светодиодами, читает датчики, управляет моторчиками.

💡 Пример кода (потребуется микроконтроллер или отладочная плата)

from machine import Pin
from time import sleep

led = Pin(2, Pin.OUT)

while True:
    led.value(not led.value())
    sleep(0.5)

⚙️ Отличия от CPython

MicroPython — это не просто уменьшенная копия Python, а полностью переписанная реализация с прицелом на компактность и работу с "железом". Вот главные отличия:

  • Урезанный стандартный модуль
    В MicroPython нет многих привычных модулей из стандартной библиотеки CPython, таких как os, threading, multiprocessing, ssl, subprocess. Вместо этого он предлагает специализированные модули: machine, utime, network, которые дают доступ к низкоуровневому управлению пинами, I2C, SPI и другими периферийными интерфейсами.
  • Ограниченная память и ресурсы
    MicroPython работает в условиях жёстких ограничений: 256–512 КБ флеш-памяти и 16–64 КБ оперативки — это норма. Поэтому часть функциональности Python либо отсутствует, либо реализована проще и компактнее.
  • Отсутствие C-расширений
    В CPython можно подключать библиотеки, написанные на C или C++ (например, numpy, scipy). В MicroPython такой возможности нет: все модули либо встроены, либо пишутся отдельно под каждую платформу.
  • Асинхронность ограничена
    В MicroPython есть uasyncio, но он сильно проще стандартного asyncio. Это облегчённая версия, рассчитанная на микрозадачи, типа мигания светодиодами и обработки простых событий.
  • Совместимость не 100%
    MicroPython старается быть максимально близким к синтаксису Python 3, но некоторые особенности могут отличаться. Например, set, dict, list и другие встроенные типы могут вести себя немного иначе из-за внутренней оптимизации.
📌 В MicroPython часто нет os, socket, threading — зато есть machine.Pin, I2C, UART, и другие низкоуровневые вещи.

⚡ Где применяется?

  • Умный дом (управление светом, датчиками движения)
  • DIY-роботы и игрушки
  • Носимые устройства
  • Метеостанции, трекеры, будильники, музыкальные коробки
Это как если бы кот управлял домом — включает лампы, открывает жалюзи и шпионит за пылесосом-роботом 😼

🐾 Кошачий факт:

MicroPython — это как котёнок с огромным интеллектом в маленьком теле. Он может и пищать, и светить, и считать, — при этом умещаясь в памяти, где обычный Python даже не загрузился бы.

✅ Вывод

MicroPython — это магия Python, которая помещается в чип размером с пуговицу.
Если хочешь управлять реальным миром с помощью знакомого кода — это идеальный выбор.


✨ CircuitPython — Python, который можно подключить по USB

Когда хочется программировать железо — но без боли и дебаггера — приходит он: CircuitPython, младший брат MicroPython, но с душой учителя.

Созданный Adafruit, он делает программирование железа таким же простым, как копировать файлы на флешку.


🧩 Что такое CircuitPython?

CircuitPython — это форк MicroPython от компании Adafruit, с акцентом на:

  • простоту и обучение,
  • доступность для новичков,
  • удобную работу через USB (без драйверов и терминалов),
  • поддержку плат Adafruit (и не только).
🐱 Образно:
Если MicroPython — это кот-инженер с отвёрткой и очками,
то CircuitPython — это кот-преподаватель, который говорит: «Пиши, не бойся, я помогу!»

🔌 Как это работает?

  1. Вы подключаете плату (например, Adafruit Feather, Trinket или даже Raspberry Pi Pico с портом).
  2. Она определяется как обычная флешка.
  3. Вы открываете файл code.py, пишете туда Python-код, сохраняете — и всё! Код тут же начинает работать на плате.

Никаких IDE, терминалов, прошивок — просто drag-and-drop 🧙‍♀️


🧪 Пример кода (моргаем светодиодом)

import board
import digitalio
import time

led = digitalio.DigitalInOut(board.D13)
led.direction = digitalio.Direction.OUTPUT

while True:
    led.value = True
    time.sleep(0.5)
    led.value = False
    time.sleep(0.5)

Сохранили — и диод зажёгся. Ура! 🐾


🧠 В чём отличия от MicroPython?

  • 📁 Флеш-диск с кодом — самый простой способ начать. MicroPython требует REPL или загрузки прошивки.
  • 📦 Файловая система работает «из коробки», можно просто скидывать шрифты, изображения, WAV-файлы.
  • 🎯 Максимальная дружелюбность — понятные ошибки, автозапуск кода, хорошая документация.
  • 🧩 Чуть меньше гибкости, чем MicroPython: меньше настроек, меньше доступа к низкоуровневому железу.
CircuitPython делает акцент на «быстрый старт», а MicroPython — на «гибкость и контроль».

🐾 Кошачий факт:

CircuitPython — это котёнок-учитель: терпеливый, с указкой, и всегда готов объяснить, почему у тебя IndentationError, а не просто «шипеть» на твой код 😸

🧰 Для чего он подходит?

  • Обучение Python с нуля
  • Создание интерактивных проектов (свет, звук, кнопки)
  • Работа с детьми, школами, хакатонами
  • Быстрый прототипинг

🧩 Поддержка плат

CircuitPython работает на десятках плат:

  • Adafruit Feather, Trinket, ItsyBitsy
  • Raspberry Pi Pico
  • Некоторые STM32 и ESP32 (через unofficial builds)

✅ Вывод

CircuitPython — это Python, который буквально можно «подключить и писать». Он идеально подходит для обучения, первых шагов в электронике, или просто весёлых DIY-проектов.

Меньше настроек, больше "работает из коробки" — кот-репетитор, а не инженер.

☕ Jython — когда Python говорит на языке Java

Представьте себе: вы пишете на Python, а используете библиотеки из Java. Работает внутри JVM, запускается как .jar, и вообще — Python среди Java-разработчиков.
Это не фантастика, это — Jython.


🧠 Что такое Jython?

Jython — это реализация Python, написанная на Java. Она работает внутри JVM (Java Virtual Machine) и позволяет:

  • писать Python-код,
  • вызывать Java-классы и библиотеки напрямую,
  • встраивать Python в Java-приложения.
🐱 Сравнение:
CPython — это кот, который живёт сам по себе.
Jython — кот, который поселился в доме Java и говорит с ним на одном языке.

🔗 Как это работает?

Когда вы запускаете Python-скрипт через Jython:

  1. Скрипт транслируется в байткод JVM (не CPython-байткод!),
  2. Этот байткод выполняется внутри Java-машины (JVM),
  3. Вы можете свободно импортировать Java-классы, создавать GUI через Swing или подключаться к JDBC-базам данных.
from java.util import Date

now = Date()
print("Сейчас:", now)

Этот код использует Java-класс Date, написан на Python — магия!

🎒 Когда и зачем использовать Jython?

  • Встроить скрипты на Python в существующее Java-приложение,
  • Дать пользователям возможность писать плагины на Python (а внутри — Java API),
  • Использовать богатую Java-библиотеку (Swing, JDBC, Apache POI и т.д.) в Python-коде.

⚠️ Ограничения Jython

  • ❌ Нет поддержки Python 3 — только Python 2.7 (да, это больно).
  • ❌ Нельзя использовать модули на C (например, numpy, scipy),
  • ❌ Проект развивается медленно (но всё ещё используется в нишевых задачах).
🐾 Факт: Jython — как пожилой кот, который всё ещё ловит мышей… но только старых мышей, без async и f-строк 🐈

📦 Где это может пригодиться?

  • Финансовые/корпоративные Java-приложения с встраиваемыми скриптами,
  • Игровые движки на Java с Python-модулями,
  • Встраиваемые консоли и инструменты автоматизации на Python внутри Java GUI.

✅ Вывод

Jython — это Python, который живёт в мире Java. Он не самый современный, но полезный, если нужно объединить удобство Python с мощью Java-библиотек.
Если вы работаете в Java-экосистеме — Jython может стать вашим пушистым помощником 🐾

🛠️ IronPython — Python, который дружит с .NET

Хочешь писать на Python, но использовать библиотеки .NET и компоненты C#?
IronPython — реализация Python для платформы .NET. Это мост между миром питона и экосистемой Microsoft.


🤖 Что такое IronPython?

IronPython — это реализация Python, написанная на C#, которая работает внутри CLR (Common Language Runtime) — «сердца» .NET.

Это значит, что:

  • Python-код компилируется в .NET-байткод,
  • можно напрямую использовать классы и библиотеки C#/.NET,
  • Python отлично встраивается в приложения на C# и WPF.
🐱 Образно:
CPython — кот-одиночка.
IronPython — кот, который живёт в Windows-доме, говорит по-C#ски и дружит с Visual Studio 😼

🧪 Пример кода: вызов .NET-библиотеки

import clr
clr.AddReference("System.Windows.Forms")
from System.Windows.Forms import Form, Label, Application

form = Form(Text="Привет из IronPython!")
label = Label(Text="Да, это Python в .NET")
form.Controls.Add(label)
Application.Run(form)

Это окно Windows, созданное… Python-кодом! 🪟🐍

🌍 Где это полезно?

  • Когда нужно встроить Python в .NET-приложение
  • Если хочется давать пользователям писать скрипты на Python, используя API на C#
  • Для создания GUI-приложений с WPF или WinForms + логикой на Python
  • В автоматизации тестирования и утилитах для Windows-среды

⚠️ Ограничения IronPython

  • ❌ Поддержка Python 3 только в разработке (официально поддерживает Python 2.7)
  • ❌ Нет доступа к модулям с C-расширениями (numpy, pandas, и т.д.)
  • ⚙️ Требует .NET среду (Windows, либо .NET Core / Mono для Linux/macOS)
🐾 Факт: IronPython — это как кот, который не просто живёт в Windows-доме, но и умеет включать свет через C#.

✅ Вывод

IronPython — это отличное решение, если вы работаете с .NET и хотите всю мощь Python внутри. Он не для научных расчётов или AI, но для автоматизации, GUI и встраивания — просто пушка.

Это не просто Python — это Python в костюме от Microsoft 🧑‍💼🐍

🧵 Stackless Python — Python без стека (ну почти)

Python ассоциируется с простотой... но что, если нужно миллионы параллельных задач, без перегрева и краха памяти?
Stackless Python — это реализация CPython, которая позволяет запускать огромное количество "микрозадач", не создавая для каждой отдельный стек ОС.


❓ Что это вообще такое?

Stackless Python — это модифицированная версия CPython с поддержкой:

  • Микропотоков (microthreads / tasklets),
  • Сверхлёгкого переключения контекста без использования стека ОС,
  • Массовой параллельности без потоков ОС.
🐱 Образно:
Обычный Python — это кот, который обрабатывает каждую задачу последовательно.
Stackless — это кот-иллюзионист: делает вид, что выполняет сто задач одновременно, но при этом ни разу не уронил стек.

🔧 Как это работает?

В Stackless Python реализована собственная система микрозадач — tasklet’ов, между которыми интерпретатор переключается вручную, без участия операционной системы.

Это:

  • быстрее, чем threading,
  • легче, чем multiprocessing,
  • не требует GIL-а между tasklet'ами (всё работает внутри одного потока).

Пример:

import stackless

def task(name):
    for i in range(3):
        print(f"{name}: {i}")
        stackless.schedule()

stackless.tasklet(task)("Кот 1")
stackless.tasklet(task)("Кот 2")
stackless.run()

Это создаст два "тасклета", которые поочерёдно выполняются, но без настоящей многопоточности.

📦 Где это полезно?

  • MMO-игры (например, EVE Online использует Stackless Python на серверной стороне),
  • симуляции с тысячами агентов,
  • параллельные системы в одном потоке (когда потоки ОС — дорого и сложно).

⚠️ Ограничения

  • Базируется на старой версии CPython (обычно 3.7 или ниже),
  • Совместимость с библиотеками может быть не полной,
  • Проект не так активно развивается,
  • Не масштабируется на многоядерные системы (всё в одном потоке).
🐾 Кошачий факт: Stackless — как кот, который делает вид, что спит, но на самом деле успевает следить за всеми мышами в комнате одновременно 😼

✅ Вывод

Stackless Python — это не замена CPython, а его "спецназ-вариант" для задач, где важно много параллельных процессов без лишней нагрузки.
Он не про модную асинхронность и не про многопоточность, а про минимализм и контроль.

Если вам нужен Python, который умеет "прыгать между задачами, как ниндзя-кот" — Stackless ваш выбор 🐈‍⬛🥷

🌐 Brython — когда Python запускается в браузере

Все мы привыкли, что для фронтенда нужен JavaScript. Но что если ты Python-разработчик и хочешь писать веб-интерфейсы без console.log() и function()?
Скажи привет Brython — Python, который живёт в браузере.


🧠 Что такое Brython?

Brython (Browser + Python) — это интерпретатор Python, написанный на JavaScript, который работает прямо в браузере. Он позволяет:

  • писать frontend-код на Python,
  • взаимодействовать с DOM (HTML-элементами),
  • обрабатывать события, клики, формы и всё остальное.
🐱 Образно:
Brython — это кот, который влез в окно браузера и начал мяукать на Python, но при этом все его команды выполняет JavaScript 😸

🔧 Как это работает?

  1. В HTML-файл подключается brython.js
  2. Внутри <script type="text/python"> пишется Python-код
  3. Brython «на лету» интерпретирует Python и вызывает соответствующий JavaScript-код

Пример:

<script type="text/python">
from browser import document, alert

def on_click(event):
    alert("Мяу! Кнопка нажата!")

document["my_button"].bind("click", on_click)
</script>

<button id="my_button">Нажми меня</button>
<script src="https://cdn.jsdelivr.net/npm/brython@3.11.0/brython.min.js"></script>
<script> brython() </script>

Кнопка будет работать — и всё это написано на Python, а не на JS!

📦 Что поддерживает?

Brython реализует почти весь Python 3, включая:

  • списки, словари, множества, классы, наследование,
  • генераторы, декораторы, контекстные менеджеры,
  • async/await, math, random, time, re и многое другое.

Также есть модуль browser для работы с DOM, ajax — для запросов и т.п.


🐾 Преимущества

  • Можно писать frontend на Python (без JS),
  • Отлично подходит для образовательных проектов, интерактивных уроков, визуальных демонстраций,
  • Быстрый старт: никаких сборок, Webpack и NPM.
Brython — идеальный вариант, если ты Python-разработчик, но хочешь сделать простой интерактивный веб-проект.

⚠️ Недостатки

  • Не такой быстрый, как нативный JavaScript (всё же это интерпретация),
  • Не работает с Python-модулями, которые используют C (например, numpy, pandas),
  • Большой скрипт (brython.js ≈ 500 КБ) — не для супер-лёгких сайтов,
  • Не совместим с фреймворками типа React/Vue (но и не конкурирует с ними напрямую).

🐱 Кошачий факт:

Brython — это как кот, который неожиданно вылез из окна браузера и стал царапать кнопки HTML, но делает это изящно и по-питоновски 🐾

✅ Вывод

Brython — отличная возможность использовать любимый Python в мире браузеров.
Он не заменит полноценный фронтенд-фреймворк, но идеально подойдёт для:

  • демонстраций,
  • визуальных интерактивов,
  • обучающих проектов,
  • быстрого прототипирования.
Хочешь показать что-то в браузере — но на Python? Brython говорит: «Мяу, запускай!»

🔄 Transcrypt — когда Python становится JavaScript-ом

Иногда хочется писать веб-интерфейсы на Python, но при этом получить настоящий, быстрый JavaScript-код на выходе.
И вот тут появляется Transcrypt — компилятор, превращающий Python в компактный JS.


🧠 Что такое Transcrypt?

Transcrypt — это компилятор, который преобразует Python-код в оптимизированный JavaScript.
То есть вы пишете на Python, нажимаете компиляцию — и получаете JS-файл, готовый к запуску в браузере.

🐱 Образно:
Brython — это кот-переводчик, который стоит между Python и браузером и всё объясняет в реальном времени.
А Transcrypt — кот-хакер, который заранее переводит весь ваш код на JavaScript и исчезает в темноте 🐈‍⬛💻

🔧 Как это работает?

  1. Вы пишете Python-код (с некоторыми ограничениями),
  2. Компилируете его командой: transcrypt my_script.py
  3. Получаете:
    • my_script.js — готовый к использованию,
    • можно подключить к HTML, как обычный JS-файл.

Пример:

def greet(name):
    print(f"Привет, {name}!")

greet("мир")

После компиляции это будет валидный, оптимизированный JS-код.


⚡ Преимущества

  • Компилируется в быстрый, нативный JavaScript,
  • Поддерживает модули ES6, классы, наследование, f-строки, списковые включения и др.,
  • Можно использовать import и разносить код по файлам,
  • Отлично подходит для SPA, веб-приложений и интерактивных интерфейсов.
В отличие от Brython, здесь не нужно тянуть весь интерпретатор в браузер — всё уже готово заранее.

🚧 Ограничения

  • Поддерживается не весь Python — только подмножество (без async, with, yield from и т.д.),
  • Нет доступа к стандартной Python-библиотеке (os, socket, sqlite и т.д.),
  • Некоторые конструкции нужно писать по-особому (например, range() реализован иначе),
  • Требует сборки и окружения (в отличие от "вставил и запустил", как у Brython).

🐾 Кошачий факт:

Transcrypt — это кот-ниндзя, который переодевается в JavaScript, чтобы без шума выполнять питоновскую миссию в браузере. Быстрый, тихий, почти незаметный 🐈‍⬛

✅ Вывод

Transcrypt — отличный выбор, если вы:

  • хорошо знаете Python,
  • хотите писать frontend-приложения,
  • и не хотите мириться с console.log() каждый день.

Если Brython — идеален для обучения и простоты, то Transcrypt — это инструмент для "боевого" фронтенда на Python, с хорошей скоростью и архитектурой.

⚙️ Nuitka — Python, который становится .exe

Python — прекрасен, но иногда хочется:

  • сделать один исполняемый файл без зависимостей,
  • ускорить выполнение кода,
  • или хотя бы скрыть исходники.

Для этого есть Nuitka — компилятор, который превращает Python-код в C++ и собирает полноценные бинарники: .exe, .bin, .so.


🧠 Что такое Nuitka?

Nuitka — это компилятор, написанный на Python, который:

  • принимает ваш .py-файл,
  • компилирует его в C++ код,
  • собирает исполняемый файл с помощью компилятора (gcc, clang, MSVC),
  • результат — бинарник, не требующий Python-интерпретатора.
🐱 Образно:
CPython — это кот, который интерпретирует команды «по ходу».
Nuitka — кот, который заранее всё продумал, собрал чемодан и выехал готовым на дело.

🔧 Как использовать?

pip install nuitka
nuitka --onefile my_script.py

Результат: my_script.exe или my_script (для Linux/macOS) — запускается без Python, даже на машине без установленного интерпретатора.


⚡ Преимущества

  • Реальный бинарник — удобно для распространения программ.
  • 🚀 Оптимизация — ваш Python-код может реально работать быстрее.
  • 🔒 Скрытие исходников — защита от копипастеров.
  • 💼 Работает с любыми библиотеками (включая numpy, pandas, PyQt, requests и т.д.)

🐢 Насколько быстрее?

  • Nuitka не превращает Python в C "напрямую", как Cython.
  • Он всё равно использует CPython внутри, но оборачивает его так, чтобы убрать лишние накладные расходы.
  • Скорость увеличивается, особенно в:
    • больших проектах,
    • циклах, алгоритмах,
    • коде с интенсивной логикой.
Но чудес не ждите — это не JIT, как в PyPy.

📦 Поддержка библиотек

Работает почти со всеми модулями, включая:

  • Научные (numpy, scipy, matplotlib),
  • Сетевые (requests, aiohttp),
  • GUI (tkinter, PyQt, wxPython),
  • И даже с asyncio, threading, multiprocessing.

⚠️ Ограничения

  • Компиляция требует установки компилятора (gcc, clang, MSVC),
  • Финальный .exe может весить 20–100 МБ (включает весь Python-рут),
  • Компиляция не всегда быстрая — на больших проектах может занимать минуты,
  • Обфускация кода ограничена — для полной защиты лучше использовать доп. инструменты.

🐾 Кошачий факт:

Nuitka — это как кот, который не только прочитал инструкцию, но ещё и сшил себе броню, налил кофе, и теперь готов запускаться в любой операционной системе как самостоятельный боец 🐱🛡️

✅ Вывод

Nuitka — мощный инструмент для тех, кто хочет:

  • собрать standalone-программу,
  • ускорить Python-код,
  • или доставлять приложения без необходимости ставить Python.

Если вы делаете десктоп-программу, CLI-утилиту или просто хотите «упаковать» скрипт для друга без знания pip — Nuitka сделает это красиво.