# Розширення та вбудовування інтерпретатора Python

У цьому документі описано, як писати модулі на C або C++, щоб розширити інтерпретатор Python новими модулями. Ці модулі можуть не лише визначати нові функції, але й нові типи об’єктів та їхні методи. У документі також описано, як вбудувати інтерпретатор Python в іншу програму для використання як мови розширення. Нарешті, показано, як компілювати та зв’язувати модулі розширення, щоб їх можна було динамічно завантажувати (під час виконання) в інтерпретатор, якщо базова операційна система підтримує цю функцію.

Цей документ передбачає базові знання про Python. Для неформального ознайомлення з мовою див. Підручник з Python. Довідник з мови Python дає більш формальне визначення мови. Стандартна бібліотека Python документує існуючі типи об’єктів, функції та модулі (як вбудовані, так і написані на Python), які надають мові широкий спектр застосування.

Для детального опису всього API Python/C перегляньте окремий Довідковий посібник з API Python/C.

## Рекомендовані сторонні інструменти

This guide only covers the basic tools for creating extensions provided as part of this version of CPython. Third party tools like Cython, cffi, SWIG and Numba offer both simpler and more sophisticated approaches to creating C and C++ extensions for Python.

Дивись також

Посібник користувача з упаковки Python: двійкові розширення

  Посібник користувача з упакування Python не лише охоплює кілька доступних інструментів, які спрощують створення бінарних розширень, але й обговорює різні причини, чому створення модуля розширення може бути бажаним у першу чергу.

## Створення розширень без сторонніх інструментів

У цьому розділі посібника описано створення розширень C і C++ без допомоги сторонніх інструментів. Він призначений насамперед для розробників цих інструментів, а не як рекомендований спосіб створення власних розширень C.

- 1. Розширення Python за допомогою C або C++
  - 1.1. Простий приклад
  - 1.2. Intermezzo: помилки та винятки
  - 1.3. Повернемося до прикладу
  - 1.4. Таблиця методів модуля та функція ініціалізації
  - 1.5. Компіляція та зв’язування
  - 1.6. Виклик функцій Python із C
  - 1.7. Вилучення параметрів у функціях розширення
  - 1.8. Параметри ключових слів для функцій розширення
  - 1.9. Побудова довільних значень
  - 1.10. Довідкова кількість
  - 1.11. Написання розширень на C++
  - 1.12. Надання C API для модуля розширення
- 2. Визначення типів розширень: підручник
  - 2.1. Основи
  - 2.2. Додавання даних і методів до базового прикладу
  - 2.3. Забезпечення більш точного контролю над атрибутами даних
  - 2.4. Підтримка циклічного збирання сміття
  - 2.5. Підкласи інших типів
- 3. Визначення типів розширень: різні теми
  - 3.1. Завершення та де-розподіл
  - 3.2. Презентація об’єкта
  - 3.3. Управління атрибутами
  - 3.4. Порівняння об’єктів
  - 3.5. Підтримка абстрактного протоколу
  - 3.6. Слабка довідкова підтримка
  - 3.7. Більше пропозицій
- 4. Створення розширень C і C++
  - 4.1. Building C and C++ Extensions with setuptools
- 5. Створення розширень C і C++ у Windows
  - 5.1. Підхід з кулінарної книги
  - 5.2. Відмінності між Unix і Windows
  - 5.3. Використання DLL на практиці

## Вбудовування середовища виконання CPython у більшу програму

Іноді замість створення розширення, яке працює в інтерпретаторі Python як основної програми, бажано замість цього вбудувати середовище виконання CPython у більшу програму. У цьому розділі описано деякі деталі, необхідні для успішного виконання цього завдання.

- 1. Вбудовування Python в іншу програму
  - 1.1. Дуже високий рівень вбудовування
  - 1.2. Поза межами вбудовування дуже високого рівня: огляд
  - 1.3. Чисте вбудовування
  - 1.4. Розширення вбудованого Python
  - 1.5. Вбудовування Python у C++
  - 1.6. Компіляція та компонування в Unix-подібних системах