Estendendo e incorporando o interpretador Python
************************************************

Neste documento descreveremos o desenvolvimento de módulos com C ou
C++ para adicionar recursos ao interpretador Python criando novos
módulos. Esses módulos podem não somente definir novas funções, mas
também novos tipos de objetos e seu conjunto de métodos. O documento
também descreve como incorporar o interpretador Python em outro
aplicativo, de forma a utilizá-lo como sendo uma extensão da
linguagem. Por fim, estudaremos como podemos compilar e fazer a
vinculação dos módulos de extensão para que estes possam ser
carregados dinamicamente (em tempo de execução) pelo interpretador,
caso o sistema operacional subjacente suportar esse recurso.

Este documento pressupõe conhecimentos básicos sobre Python. Para uma
introdução informal à linguagem, consulte O tutorial do Python. A
Referência da Linguagem Python fornece uma definição mais formal da
linguagem. A Biblioteca Padrão do Python documenta os tipos, funções e
módulos de objetos existentes (embutidos e escritos em Python) que dão
à linguagem sua ampla gama de aplicações.

Para uma descrição detalhada de toda a API Python/C, consulte o Manual
de referência da API Python/C separado.


Ferramentas de terceiros recomendadas
=====================================

Esse guia cobre apenas as ferramentas básicas para a criação de
extensões fornecidas como parte desta versão do CPython. Ferramentas
de terceiros como Cython, cffi, SWIG e Numba oferecem abordagens mais
simples e sofisticadas para criar extensões C e C++ para Python.

Ver também:

  Guia do Usuário de Empacotamento do Python: Extensões Binárias
     O Guia do Usuário de Empacotamento do Python não abrange apenas
     várias ferramentas disponíveis que simplificam a criação de
     extensões binárias, mas também discute os vários motivos pelos
     quais a criação de um módulo de extensão pode ser desejável em
     primeiro lugar.


Criando extensões sem ferramentas de terceiros
==============================================

Esta seção do guia aborda a criação de extensões C e C++ sem
assistência de ferramentas de terceiros. Destina-se principalmente aos
criadores dessas ferramentas, em vez de ser uma maneira recomendada de
criar suas próprias extensões C.

* 1. Estendendo Python com C ou C++

  * 1.1. Um Exemplo Simples

  * 1.2. Intermezzo: erros e exceções

  * 1.3. De volta ao exemplo

  * 1.4. A tabela de métodos e a função de inicialização do módulo

  * 1.5. Compilação e vinculação

  * 1.6. Chamando funções Python de C

  * 1.7. Extraindo parâmetros em funções de extensão

  * 1.8. Parâmetros nomeados para funções de extensão

  * 1.9. Construindo valores arbitrários

  * 1.10. Contagens de referências

  * 1.11. Escrevendo extensões em C++

  * 1.12. Fornecendo uma API C para um módulo de extensão

* 2. Definindo Tipos de Extensão: Tutorial

  * 2.1. O básico

  * 2.2. Adicionando dados e métodos ao exemplo básico

  * 2.3. Fornecendo controle mais preciso sobre atributos de dados

  * 2.4. Apoiando a coleta de lixo cíclica

  * 2.5. Criando subclasses de outros tipos

* 3. Defining Extension Types: Assorted Topics

  * 3.1. Finalization and De-allocation

  * 3.2. Object Presentation

  * 3.3. Attribute Management

  * 3.4. Object Comparison

  * 3.5. Abstract Protocol Support

  * 3.6. Weak Reference Support

  * 3.7. More Suggestions

* 4. Construindo extensões C e C++

  * 4.1. Construindo extensões C e C ++ com distutils

  * 4.2. Distribuindo seus módulos de extensão

* 5. Construindo Extensões C e C++ no Windows

  * 5.1. Uma abordagem de livro de receitas

  * 5.2. Diferenças entre o Unix e o Windows

  * 5.3. Usando DLLs na prática


Incorporando o tempo de execução do CPython em uma aplicação maior
==================================================================

Às vezes, em vez de criar uma extensão que é executada dentro do
interpretador Python como a aplicação principal, é desejável
incorporar o tempo de execução do CPython em uma aplicação maior. Esta
seção aborda alguns dos detalhes envolvidos para fazer isso com êxito.

* 1. Incorporando o Python numa Outra Aplicação

  * 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
