> **Источник:** https://python-all.ru/3.16/extending/index.html
>
> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.

---

# Расширение и встраивание интерпретатора Python

В этом документе описывается, как писать модули на C или C++ для расширения интерпретатора Python новыми модулями. Такие модули могут делать то же, что и код на Python – определять функции, типы объектов и методы – но также взаимодействовать с нативными библиотеками или достигать лучшей производительности, избегая накладных расходов интерпретатора. Документ также описывает, как встроить интерпретатор Python в другое приложение для использования в качестве расширяющего языка. Наконец, показано, как компилировать и компоновать модули расширения, чтобы они могли загружаться динамически (во время выполнения) в интерпретатор, если поддерживающая операционная система это позволяет.

Предполагается, что читатель обладает базовыми знаниями C и Python. Для неформального введения в Python см. [Python Tutorial](https://python-all.ru/3.16/tutorial/index.html#tutorial-index). [Справочник по языку Python](https://python-all.ru/3.16/reference/index.html#reference-index) даёт более формальное определение языка. [Стандартная библиотека Python](https://python-all.ru/3.16/library/index.html#library-index) документирует существующие типы объектов, функции и модули (как встроенные, так и написанные на Python), которые обеспечивают языку широкий спектр применения.

Подробное описание всего Python/C API см. в отдельном [справочном руководстве по Python/C API](https://python-all.ru/3.16/c-api/index.html#c-api-index).

Для поддержки расширений C API Python (интерфейс прикладного программирования) определяет набор функций, макросов и переменных, обеспечивающих доступ к большинству аспектов системы времени выполнения Python. Python API подключается в C-исходном файле включением заголовочного файла `"Python.h"`.

> **Примечание**
>
> Интерфейс расширений на C специфичен для CPython, и модули расширения не работают в других реализациях Python. Во многих случаях можно избежать написания C-расширений и сохранить переносимость на другие реализации. Например, если ваша задача – вызов функций библиотек C или системных вызовов, стоит рассмотреть использование модуля [`ctypes`](https://python-all.ru/3.16/library/ctypes.html#module-ctypes) или библиотеки [cffi](https://python-all.ru/3.16/extending/index.html) вместо написания собственного кода на C. Эти модули позволяют писать код на Python для взаимодействия с C-кодом и более переносимы между реализациями Python, чем написание и компиляция модуля расширения на C.

## Рекомендуемые сторонние инструменты

В этом документе описаны только базовые средства создания расширений, входящие в состав этой версии CPython. Некоторые [сторонние инструменты](https://python-all.ru/3.16/c-api/intro.html#c-api-tools) предлагают как более простые, так и более сложные подходы к созданию C- и C++-расширений для Python.

Хотя этот документ предназначен для авторов расширений, он будет полезен и авторам таких инструментов. Например, учебный модуль может служить простым тестовым примером для системы сборки или ожидаемым выводом генератора кода.

## Учебник по C API

В этом учебнике описывается, как написать простой модуль на C или C++, используя Python C API – то есть базовые средства, входящие в состав этой версии CPython.

1. [Первый модуль расширения C API](https://python-all.ru/3.16/extending/first-extension-module.html#first-extension-module)

## Руководства по промежуточным темам

Этот раздел руководства охватывает создание C- и C++-расширений без использования сторонних инструментов. Он предназначен в первую очередь для создателей таких инструментов, а не как рекомендуемый способ создания собственных C-расширений.

- [Использование C API: различные темы](https://python-all.ru/3.16/extending/extending.html#extending-intro)
- [Определение типов расширений: учебник](https://python-all.ru/3.16/extending/newtypes_tutorial.html#defining-new-types)
- [Определение типов расширений: различные темы](https://python-all.ru/3.16/extending/newtypes.html#new-types-topics)
- [Сборка C- и C++-расширений](https://python-all.ru/3.16/extending/building.html#building)
- [Сборка C- и C++-расширений в Windows](https://python-all.ru/3.16/extending/windows.html#building-on-windows)

## Встраивание среды выполнения CPython в более крупное приложение

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

- [Встраивание Python в другое приложение](https://python-all.ru/3.16/extending/embedding.html#embedding)
