Interface binária de aplicativo estável¶
Tradicionalmente, a API C do Python mudará com cada versão. A maioria das mudanças será compatível com a origem, normalmente, apenas adicionando API, ao invés de alterar a API existente ou remover API (embora algumas interfaces sejam removidas depois de primeiro se tornarem obsoletas ).
Infelizmente, a compatibilidade da API não se estende à compatibilidade binária (o ABI). O motivo é principalmente a evolução das definições de estrutura, onde a adição de um novo campo, ou a alteração do tipo de um campo, pode não quebrar a API, mas pode quebrar o ABI. Como consequência, os módulos de extensão precisam ser recompilados para cada versão do Python (embora exista uma exceção no Unix quando nenhuma das interfaces afetadas é usada). Além disso, no Windows, os módulos de extensão se conectam com um pythonXY.dll específico e precisam ser recompilados para vincular com um novo.
Desde o Python 3.2, um subconjunto da API foi declarado para garantir um ABI estável. Os módulos de extensão que desejam usar esta API (chamada “API limitada”) precisam definir Py_LIMITED_API
. Uma série de detalhes do intérprete ficam escondidos do módulo de extensão; em troca, um módulo é construído que funciona em qualquer versão 3.x (x> = 2) sem recompilação.
Em alguns casos, a ABI estável deve ser estendida com novas funções. Os módulos de extensão que desejam usar essas novas APIs precisam definir Py_LIMITED_API
para o PY_VERSION_HEX
valor (veja: ref:apiabiversion) da versão mínima do Python que eles querem suportar (por exemplo,``0x03030000`` para Python 3.3). Esses módulos funcionarão em todas as versões subsequentes do Python, mas não carregarão (por causa dos símbolos que faltam) nos lançamentos mais antigos.
A partir do Python 3.2, o conjunto de funções disponíveis para a API limitada está documentado em PEP 384. Na documentação da API C, os elementos da API que não fazem parte da API limitada são marcados como “Não faz parte da API limitada”.