Bem-vindo ao Cython!
Cython é um compilador Python que torna a escrita de extensões C para Python tão fácil quanto o próprio Python. Cython é baseado em Pyrex, mas oferece suporte a funcionalidades e otimizações mais avançadas.
Cython traduz código Python para código C/C++, mas também oferece suporte à chamada de funções C e à declaração de tipos C em variáveis e atributos de classe. Isso permite que o compilador gere código C muito eficiente a partir do código Cython.
Isso torna o Cython a linguagem ideal para agrupar bibliotecas C externas e para módulos C rápidos que aceleram a execução do código Python.
- Site oficial: https://cython.org/
- Documentação: https://docs.cython.org/
- Repositório Github: https://github.com/cython/cython
- Wiki: https://github.com/cython/cython/wiki
Cython tem cerca de 30 milhões de downloads por mês no PyPI. Você pode apoiar o projeto Cython por meio dos patrocinadores do Github ou do Tidelift.
Instalação:
Se você já possui um compilador C, basta executar o seguinte comando:
pip instalar Cython
caso contrário, consulte a página de instalação.
Licença:
O programa Pyrex original foi licenciado “livre de restrições” (veja abaixo). O próprio Cython é licenciado sob a licença permissiva Apache .
Consulte LICENSE.txt.
Contribuindo:
Quer contribuir com o projeto Cython? Aqui está alguma ajuda para você começar.
Diferenças para outros compiladores Python
Iniciado como um projeto no início dos anos 2000, o Cython sobreviveu à maioria das outras tentativas de produzir compiladores estáticos para a linguagem Python.
Projetos semelhantes que têm relevância hoje incluem:
- PyPy, uma implementação Python com um compilador JIT.
- Prós: compilação JIT com otimizações de tempo de execução, totalmente compatível com a linguagem, boa integração com código C/C++ externo
- Contras: tempo de execução não CPython, uso relativamente grande de recursos do tempo de execução, compatibilidade limitada com extensões CPython, resultados de desempenho não óbvios
- Numba, uma extensão Python que apresenta um compilador JIT para um subconjunto da linguagem, baseado na infraestrutura do compilador LLVM (provavelmente mais conhecido por seu compilador
clang
C). Ele tem como alvo principalmente código numérico que usa NumPy.- Prós: Compilação JIT com otimizações de tempo de execução
- Contras: suporte a idiomas limitado, dependência de tempo de execução relativamente grande (LLVM), resultados de desempenho não óbvios
- Pythran, um compilador estático de extensão Python para C++ para um subconjunto da linguagem, voltado principalmente para computação numérica. Pythran pode ser (e provavelmente é melhor) usado como um back-end adicional para código NumPy em Cython.
- mypyc, um compilador estático de extensão Python para C, baseado no analisador estático Python mypy. Assim como o modo Python puro do Cython, mypyc pode usar anotações do tipo PEP-484 para otimizar o código para tipos estáticos.
- Prós: bom suporte para linguagem e digitação PEP-484, boa inferência de tipo, ganhos razoáveis de desempenho
- Contras: sem suporte para otimizações e digitação de baixo nível, interpretação opinativa do tipo Python, compatibilidade reduzida com Python e introspecção após a compilação
- Nuitka, um compilador estático de extensão Python para C.
- Prós: altamente compatível com a linguagem, ganhos de desempenho razoáveis, suporte para vinculação de aplicativos estáticos (semelhante ao cython_freeze, mas com a capacidade de agrupar dependências de biblioteca em um executável independente)
- Contras: sem suporte para otimizações e digitação de baixo nível
Em comparação com o acima, Cython fornece
- suporte rápido, eficiente e altamente compatível para quase todos os recursos da linguagem Python, incluindo recursos dinâmicos e introspecção
- compatibilidade total de tempo de execução com todas as versões ainda em uso e futuras do CPython
- "gerar uma vez, compilar em qualquer lugar" geração de código C que permite resultados e testes de desempenho reproduzíveis
- Adaptação do tempo de compilação C à plataforma alvo e versão Python
- suporte para outras implementações C-API, incluindo PyPy e Pyston
- integração perfeita com código C/C++
- amplo suporte para otimização manual e ajuste até o nível C
- uma grande base de usuários com milhares de bibliotecas, pacotes e ferramentas
- quase duas décadas de correção de bugs e otimizações de código estático
Obtenha o histórico completo da fonte:
Observe que o Cython costumava enviar o repositório completo de controle de versão em sua distribuição fonte, mas não o faz mais devido a restrições de espaço. Para obter o histórico completo da fonte de um arquivo de origem baixado, certifique-se de ter o git instalado e, em seguida, entre no diretório base da distribuição de origem do Cython e digite:
fazer repositório
O seguinte é do Pyrex:
Esta é uma versão de desenvolvimento do Pyrex, uma linguagem para escrever módulos de extensão Python.
Para mais informações, dê uma olhada em:
- Doc/About.html para uma descrição do idioma
- INSTALL.txt para instruções de instalação
- USAGE.txt para instruções de uso
- Demonstrações para exemplos de uso
Comentários, sugestões, relatórios de bugs, etc. são muito bem-vindos!
Coisas de direitos autorais: O Pyrex está livre de restrições. Você pode usar, redistribuir, modificar e distribuir versões modificadas.
A versão mais recente do Pyrex pode ser encontrada aqui.
Greg Ewing, Departamento de Ciência da Computação
Universidade de Cantuária
Christchurch, Nova Zelândia
Cidadão da NewZealandCorp, uma subsidiária integral da USA Inc.