index.md
1> **Источник:** https://python-all.ru/3.15/extending/index.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Расширение и встраивание интерпретатора Python89В этом документе описывается, как писать модули на C или C++ для расширения интерпретатора Python новыми модулями. Такие модули могут делать то же, что и код на Python – определять функции, типы объектов и методы – но также взаимодействовать с нативными библиотеками или достигать лучшей производительности, избегая накладных расходов интерпретатора. Документ также описывает, как встроить интерпретатор Python в другое приложение для использования в качестве расширяющего языка. Наконец, показано, как компилировать и компоновать модули расширения, чтобы они могли загружаться динамически (во время выполнения) в интерпретатор, если поддерживающая операционная система это позволяет.1011Предполагается, что читатель обладает базовыми знаниями C и Python. Для неформального введения в Python см. [Python Tutorial](https://python-all.ru/3.15/tutorial/index.html#tutorial-index). [Справочник по языку Python](https://python-all.ru/3.15/reference/index.html#reference-index) даёт более формальное определение языка. [Стандартная библиотека Python](https://python-all.ru/3.15/library/index.html#library-index) документирует существующие типы объектов, функции и модули (как встроенные, так и написанные на Python), которые обеспечивают языку широкий спектр применения.1213Подробное описание всего Python/C API см. в отдельном [справочном руководстве по Python/C API](https://python-all.ru/3.15/c-api/index.html#c-api-index).1415Для поддержки расширений C API Python (интерфейс прикладного программирования) определяет набор функций, макросов и переменных, обеспечивающих доступ к большинству аспектов системы времени выполнения Python. Python API подключается в C-исходном файле включением заголовочного файла `"Python.h"`.1617> **Примечание**18>19> Интерфейс расширений на C специфичен для CPython, и модули расширения не работают в других реализациях Python. Во многих случаях можно избежать написания C-расширений и сохранить переносимость на другие реализации. Например, если ваша задача – вызов функций библиотек C или системных вызовов, стоит рассмотреть использование модуля [`ctypes`](https://python-all.ru/3.15/library/ctypes.html#module-ctypes) или библиотеки [cffi](https://python-all.ru/3.15/extending/index.html) вместо написания собственного кода на C. Эти модули позволяют писать код на Python для взаимодействия с C-кодом и более переносимы между реализациями Python, чем написание и компиляция модуля расширения на C.2021## Рекомендуемые сторонние инструменты2223В этом документе описаны только базовые средства создания расширений, входящие в состав этой версии CPython. Некоторые [сторонние инструменты](https://python-all.ru/3.15/c-api/intro.html#c-api-tools) предлагают как более простые, так и более сложные подходы к созданию C- и C++-расширений для Python.2425Хотя этот документ предназначен для авторов расширений, он будет полезен и авторам таких инструментов. Например, учебный модуль может служить простым тестовым примером для системы сборки или ожидаемым выводом генератора кода.2627## Учебник по C API2829В этом учебнике описывается, как написать простой модуль на C или C++, используя Python C API – то есть базовые средства, входящие в состав этой версии CPython.30311. [Первый модуль расширения C API](https://python-all.ru/3.15/extending/first-extension-module.html#first-extension-module)3233## Руководства по промежуточным темам3435Этот раздел руководства охватывает создание C- и C++-расширений без использования сторонних инструментов. Он предназначен в первую очередь для создателей таких инструментов, а не как рекомендуемый способ создания собственных C-расширений.3637- [Использование C API: различные темы](https://python-all.ru/3.15/extending/extending.html#extending-intro)38- [Определение типов расширений: учебник](https://python-all.ru/3.15/extending/newtypes_tutorial.html#defining-new-types)39- [Определение типов расширений: различные темы](https://python-all.ru/3.15/extending/newtypes.html#new-types-topics)40- [Сборка C- и C++-расширений](https://python-all.ru/3.15/extending/building.html#building)41- [Сборка C- и C++-расширений в Windows](https://python-all.ru/3.15/extending/windows.html#building-on-windows)4243## Встраивание среды выполнения CPython в более крупное приложение4445Иногда вместо создания расширения, работающего внутри интерпретатора Python как основного приложения, желательно встроить среду выполнения CPython в более крупное приложение. В этом разделе рассматриваются некоторые детали, необходимые для успешного выполнения этой задачи.4647- [Встраивание Python в другое приложение](https://python-all.ru/3.15/extending/embedding.html#embedding)48