Bienvenue à Cython !
Cython est un compilateur Python qui rend l'écriture d'extensions C pour Python aussi simple que Python lui-même. Cython est basé sur Pyrex, mais prend en charge des fonctionnalités et des optimisations plus avancées.
Cython traduit le code Python en code C/C++, mais prend également en charge l'appel de fonctions C et la déclaration de types C sur les variables et les attributs de classe. Cela permet au compilateur de générer du code C très efficace à partir du code Cython.
Cela fait de Cython le langage idéal pour encapsuler des bibliothèques C externes et pour des modules C rapides qui accélèrent l'exécution du code Python.
- Site officiel : https://cython.org/
- Documentation : https://docs.cython.org/
- Dépôt Github : https://github.com/cython/cython
- Wiki : https://github.com/cython/cython/wiki
Cython compte environ 30 millions de téléchargements par mois sur PyPI. Vous pouvez soutenir le projet Cython via Github Sponsors ou Tidelift.
Installation:
Si vous disposez déjà d'un compilateur C, exécutez simplement la commande suivante :
pip installer Cython
sinon, voir la page d'installation.
Licence:
Le programme Pyrex original était sous licence « sans restrictions » (voir ci-dessous). Cython lui-même est sous licence permissive Apache .
Voir LICENSE.txt.
Contribuer :
Vous souhaitez contribuer au projet Cython ? Voici de l'aide pour vous aider à démarrer.
Différences avec les autres compilateurs Python
Lancé comme projet au début des années 2000, Cython a survécu à la plupart des autres tentatives de production de compilateurs statiques pour le langage Python.
Parmi les projets similaires qui sont pertinents aujourd’hui figurent :
- PyPy, une implémentation Python avec un compilateur JIT.
- Avantages : compilation JIT avec optimisations d'exécution, entièrement compatible avec le langage, bonne intégration avec du code C/C++ externe
- Inconvénients : runtime non CPython, utilisation relativement importante des ressources du runtime, compatibilité limitée avec les extensions CPython, résultats de performances non évidents
- Numba, une extension Python qui comprend un compilateur JIT pour un sous-ensemble du langage, basé sur l'infrastructure du compilateur LLVM (probablement mieux connue pour son compilateur
clang
C). Il cible principalement le code numérique utilisant NumPy.- Avantages : compilation JIT avec optimisations d'exécution
- Inconvénients : prise en charge linguistique limitée, dépendance d'exécution relativement importante (LLVM), résultats de performances non évidents
- Pythran, un compilateur d'extension statique Python vers C++ pour un sous-ensemble du langage, principalement destiné au calcul numérique. Pythran peut être (et est probablement le meilleur) utilisé comme backend supplémentaire pour le code NumPy dans Cython.
- mypyc, un compilateur d'extension statique Python vers C, basé sur l'analyseur Python statique mypy. Comme le mode Python pur de Cython, mypyc peut utiliser les annotations de type PEP-484 pour optimiser le code pour les types statiques.
- Avantages : bonne prise en charge du langage et du typage PEP-484, bonne inférence de type, gains de performances raisonnables
- Inconvénients : pas de prise en charge des optimisations et du typage de bas niveau, interprétation avisée du type Python, compatibilité Python réduite et introspection après compilation
- Nuitka, un compilateur d'extension statique Python vers C.
- Avantages : hautement conforme au langage, gains de performances raisonnables, prise en charge de la liaison d'applications statiques (similaire à cython_freeze mais avec la possibilité de regrouper les dépendances de la bibliothèque dans un exécutable autonome)
- Inconvénients : pas de prise en charge des optimisations et du typage de bas niveau
En comparaison avec ce qui précède, Cython fournit
- prise en charge rapide, efficace et hautement conforme de presque toutes les fonctionnalités du langage Python, y compris les fonctionnalités dynamiques et l'introspection
- compatibilité d'exécution complète avec toutes les versions encore utilisées et futures de CPython
- "générer une fois, compiler partout" Génération de code C qui permet d'obtenir des résultats et des tests de performances reproductibles
- Adaptation du temps de compilation C à la plateforme cible et à la version Python
- prise en charge d'autres implémentations de C-API, notamment PyPy et Pyston
- intégration transparente avec le code C/C++
- large prise en charge de l'optimisation manuelle et du réglage jusqu'au niveau C
- une large base d'utilisateurs avec des milliers de bibliothèques, packages et outils
- près de deux décennies de correction de bugs et d'optimisations de code statique
Obtenez l'historique complet des sources :
Notez que Cython fournissait le référentiel de contrôle de version complet dans sa distribution source, mais ne le fait plus en raison de contraintes d'espace. Pour obtenir l'historique complet des sources à partir d'une archive source téléchargée, assurez-vous que git est installé, puis accédez au répertoire de base de la distribution source Cython et tapez :
faire un dépôt
Ce qui suit vient de Pyrex :
Il s'agit d'une version de développement de Pyrex, un langage permettant d'écrire des modules d'extension Python.
Pour plus d'informations, jetez un oeil à:
- Doc/About.html pour une description du langage
- INSTALL.txt pour les instructions d'installation
- USAGE.txt pour les instructions d'utilisation
- Démos pour des exemples d'utilisation
Les commentaires, suggestions, rapports de bugs, etc. sont les bienvenus !
Éléments de droits d'auteur : Pyrex est exempt de restrictions. Vous pouvez utiliser, redistribuer, modifier et distribuer des versions modifiées.
La dernière version de Pyrex peut être trouvée ici.
Greg Ewing, Département d'informatique
Université de Cantorbéry
Christchurch, Nouvelle-Zélande
Citoyen de NewZealandCorp, une filiale en propriété exclusive de USA Inc.