¡Bienvenidos a Cython!
Cython es un compilador de Python que hace que escribir extensiones de C para Python sea tan fácil como el propio Python. Cython se basa en Pyrex, pero admite optimizaciones y funciones más avanzadas.
Cython traduce el código Python a código C/C++, pero además admite llamar a funciones C y declarar tipos C en variables y atributos de clase. Esto permite al compilador generar código C muy eficiente a partir del código Cython.
Esto convierte a Cython en el lenguaje ideal para empaquetar bibliotecas C externas y para módulos C rápidos que aceleran la ejecución del código Python.
- Sitio web oficial: https://cython.org/
- Documentación: https://docs.cython.org/
- Repositorio de Github: https://github.com/cython/cython
- Wiki: https://github.com/cython/cython/wiki
Cython tiene alrededor de 30 millones de descargas por mes en PyPI. Puedes apoyar el proyecto Cython a través de Github Sponsors o Tidelift.
Instalación:
Si ya tienes un compilador de C, simplemente ejecuta el siguiente comando:
pip instalar Cython
de lo contrario, consulte la página de instalación.
Licencia:
El programa Pyrex original tenía licencia "libre de restricciones" (ver más abajo). El propio Cython tiene la licencia permisiva Apache .
Consulte LICENCIA.txt.
Contribuyendo:
¿Quieres contribuir al proyecto Cython? A continuación le ofrecemos ayuda para empezar.
Diferencias con otros compiladores de Python
Cython, que comenzó como un proyecto a principios de la década de 2000, ha sobrevivido a la mayoría de los otros intentos de producir compiladores estáticos para el lenguaje Python.
Proyectos similares que tienen relevancia hoy incluyen:
- PyPy, una implementación de Python con un compilador JIT.
- Ventajas: compilación JIT con optimizaciones de tiempo de ejecución, totalmente compatible con el lenguaje, buena integración con código C/C++ externo
- Desventajas: tiempo de ejecución que no es CPython, uso relativamente grande de recursos del tiempo de ejecución, compatibilidad limitada con extensiones de CPython, resultados de rendimiento no obvios
- Numba, una extensión de Python que presenta un compilador JIT para un subconjunto del lenguaje, basado en la infraestructura del compilador LLVM (probablemente mejor conocido por su compilador
clang
C). Se dirige principalmente a código numérico que utiliza NumPy.- Ventajas: compilación JIT con optimizaciones de tiempo de ejecución
- Desventajas: soporte de idiomas limitado, dependencia de tiempo de ejecución (LLVM) relativamente grande, resultados de rendimiento no obvios
- Pythran, un compilador de extensión estático de Python a C++ para un subconjunto del lenguaje, dirigido principalmente al cálculo numérico. Pythran se puede utilizar (y probablemente sea mejor) como backend adicional para el código NumPy en Cython.
- mypyc, un compilador de extensión estático de Python a C, basado en el analizador estático de Python mypy. Al igual que el modo Python puro de Cython, mypyc puede utilizar anotaciones de tipo PEP-484 para optimizar el código para tipos estáticos.
- Ventajas: buen soporte para lenguaje y escritura PEP-484, buena inferencia de tipos, ganancias de rendimiento razonables
- Contras: no hay soporte para optimizaciones y escritura de bajo nivel, interpretación obstinada de tipos de Python, compatibilidad reducida con Python e introspección después de la compilación
- Nuitka, un compilador de extensión estático de Python a C.
- Ventajas: altamente compatible con el lenguaje, ganancias de rendimiento razonables, soporte para vinculación de aplicaciones estáticas (similar a cython_freeze pero con la capacidad de agrupar las dependencias de la biblioteca en un ejecutable autónomo)
- Desventajas: no hay soporte para optimizaciones y escritura de bajo nivel
En comparación con lo anterior, Cython proporciona
- Soporte rápido, eficiente y altamente compatible para casi todas las características del lenguaje Python, incluidas las características dinámicas y la introspección.
- compatibilidad total en tiempo de ejecución con todas las versiones futuras y aún en uso de CPython
- "generar una vez, compilar en todas partes" Generación de código C que permite pruebas y resultados de rendimiento reproducibles
- Adaptación del tiempo de compilación de C a la plataforma de destino y la versión de Python
- soporte para otras implementaciones de C-API, incluidas PyPy y Pyston
- integración perfecta con código C/C++
- Amplio soporte para optimización manual y ajuste al nivel C.
- una gran base de usuarios con miles de bibliotecas, paquetes y herramientas
- casi dos décadas de corrección de errores y optimizaciones de código estático
Obtenga el historial fuente completo:
Tenga en cuenta que Cython solía incluir el repositorio de control de versiones completo en su distribución fuente, pero ya no lo hace debido a limitaciones de espacio. Para obtener el historial fuente completo de un archivo fuente descargado, asegúrese de tener instalado git, luego ingrese al directorio base de la distribución fuente Cython y escriba:
hacer repositorio
Lo siguiente es de Pyrex:
Esta es una versión de desarrollo de Pyrex, un lenguaje para escribir módulos de extensión de Python.
Para más información, echa un vistazo a:
- Doc/About.html para obtener una descripción del idioma
- INSTALL.txt para obtener instrucciones de instalación
- USAGE.txt para instrucciones de uso
- Demostraciones de ejemplos de uso
¡Los comentarios, sugerencias, informes de errores, etc. son bienvenidos!
Material de derechos de autor: Pyrex está libre de restricciones. Puede utilizar, redistribuir, modificar y distribuir versiones modificadas.
La última versión de Pyrex se puede encontrar aquí.
Greg Ewing, Departamento de Ciencias de la Computación
Universidad de Canterbury
Christchurch, Nueva Zelanda
Un ciudadano de NewZealandCorp, una subsidiaria de propiedad total de USA Inc.