# Rozszerzony i wbudowany interpreter Python

Ten dokument opisuje jak pisać moduły w C lub C++ do rozszerzania Python Interpreter o nowe moduły. Te moduły mogą nie tylko zawierać nowe funkcje, ale też nowe obiekty i ich metody. Dokument również zawiera opis jak wbudować interpreter Pyhona do innej aplikacji w celu rozszerzenia języka. Podsumowując pokażemy ci jak kompilować i linkować rozszerzone moduły, tak że mogą być załadowane dynamicznie w danej chwili przez interpreter, o ile dany system operacyjny wspiera tą funkcję.

Ten dokument zawiera podstawową wiedzę o Pythonie. Z nieformalnym wstępem do języka zapoznaj się z Python Tutorial. Dokumentacja języka Python zawiera bardziej formalny opis języka. Dokumenty Biblioteka standardowa Pythona zawierają istniejące typy obiektów, funkcje i moduły (zarówno wbudowane jak i napisane w Pythonie) dające językowi duże pole zastosowań.

Aby zapoznać się z dokładną instrukcją dla Python/C API, spójrz na Python/C API Reference Manual.

## Rekomendowane zewnętrzne narzędzia.

Ten przewodnik obejmuje tylko podstawowe narzędzia do tworzenia rozszerzeń dostarczane jako część aktualnej wersji CPython. Narzędzia innych firm, takie jak ” Cython <http://cython.org/>»_, « Cffi <https://cffi.readthedocs.io>`_,» SWIG <http://www.swig.org > ` _ i «Numba <https://numba.pydata.org / >» _ oferują zarówno prostsze, jak i bardziej wyrafinowane podejście do tworzenia rozszerzeń C i C++ dla Pythona.

Zobacz także

Pakiety Pythona Podręcznik Użytkownika: Rozszerzenia Binarne <https://packaging.python.org/guides/packaging-binary-extensions/

  Przewodnik Użytkownika Python Packaging nie tylko obejmuje kilka dostępnych narzędzi, które upraszczają tworzenie rozszerzeń binarnych, ale także omawia różne powody, dla których tworzenie modułu rozszerzeń może być pożądane w pierwszej kolejności.

## Tworzenie rozszerzeń poprzez narzędzia zewnętrzne.

Ta część przewodnika obejmuje tworzenie rozszerzeń C i C++ bez pomocy narzędzi innych firm. Jest przeznaczony przede wszystkim dla twórców tych narzędzi, a nie jest zalecanym sposobem tworzenia własnych rozszerzeń C.

- 1. Rozszerzanie Pythona za pomocą C lub C++
  - 1.1. Prosty przykład
  - 1.2. Intermezzo: Błędy i Wyjątki
  - 1.3. Z powrotem do Przykładu
  - 1.4. Zadanie zainicjowania i tabela sposobów postępowania modułu.
  - 1.5. Kompilacja i łączenie
  - 1.6. Wywoływanie zadań języka pytonowskiego z C
  - 1.7. Wydobywanie parametrów w zadaniach rozszerzających
  - 1.8. Parametry kluczowe dla zadań rozszerzających
  - 1.9. Budowanie dowolnych wartości
  - 1.10. Liczby odniesień
  - 1.11. Pisanie rozszerzeń w C++
  - 1.12. Dostarczanie sprzęgu programowania aplikacji (API) języka C dla modułu rozszerzającego
- 2. Defining Extension Types: Tutorial
  - 2.1. The Basics
  - 2.2. Adding data and methods to the Basic example
  - 2.3. Providing finer control over data attributes
  - 2.4. Supporting cyclic garbage collection
  - 2.5. Subclassing other types
- 3. Defining Extension Types: Assorted Topics
  - 3.1. Finalizowanie i de-alokacja
  - 3.2. Prezentacja Przedmiotów
  - 3.3. Zarządzanie własnościami
  - 3.4. Porównywanie przedmiotów
  - 3.5. Wsparcie protokołu abstrakcyjnego
  - 3.6. Wsparcie dla słabych odniesień
  - 3.7. Więcej sugestii
- 4. Building C and C++ Extensions
  - 4.1. Building C and C++ Extensions with distutils
  - 4.2. Distributing your extension modules
- 5. Tworzenie rozszerzeń C i C++ w Windowsie
  - 5.1. A Cookbook Approach
  - 5.2. Różnice pomiędzy Unixem a Windowsem
  - 5.3. Using DLLs in Practice

## Wbudowywanie runtime Cpython w większą aplikację.

Czasami zamiast tworzyć rozszerzenie, które działa wewnątrz interpretera Pythona jako głównej aplikacji, pożądane jest osadzenie środowiska wykonawczego CPython w większej aplikacji. W tej sekcji omówiono niektóre szczegóły związane z pomyślnym wykonaniem tego zadania.

- 1. Embedding Python in Another Application
  - 1.1. Very High Level Embedding
  - 1.2. Beyond Very High Level Embedding: An overview
  - 1.3. Pure Embedding
  - 1.4. Extending Embedded Python
  - 1.5. Embedding Python in C++
  - 1.6. Compiling and Linking under Unix-like systems