Какие существуют способы компиляции Python-кода

«Какие существуют способы компиляции Python-кода» — вопрос из категории Python, который задают на 10% собеседований Python Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

  1. Компиляция в байт-код (.pyc) Это стандартный механизм CPython. Когда вы импортируете модуль, интерпретатор компилирует исходный код (.py) в байт-код и сохраняет его в файле .pyc. Этот байт-код затем выполняется виртуальной машиной Python (PVM). Это не компиляция в машинный код, а в промежуточное представление.

  2. JIT-компиляция (Just-In-Time) Реализации Python, такие как PyPy, используют JIT-компиляцию. Во время выполнения программы они анализируют "горячие" участки кода (которые выполняются чаще всего) и компилируют их в нативный машинный код, что значительно ускоряет исполнение.

  3. AOT-компиляция (Ahead-Of-Time) Эти инструменты компилируют Python-код в код на другом языке (обычно C/C++) и затем в машинный код до выполнения программы.

    • Cython: Позволяет писать код на языке, который является надмножеством Python, с добавлением статической типизации C. Этот код компилируется в высокопроизводительные C-расширения (.pyd или .so), которые можно импортировать в обычном Python.
    • Nuitka: Транслирует Python-код в C++ код и затем компилирует его в исполняемый файл или модуль расширения, стремясь к полной совместимости и увеличению скорости.