Est-il possible de compiler Python de manière native (au-delà du code octet pyc)?
-
03-07-2019 - |
Question
Je me demande s'il est possible de créer un module exécutable à partir d'un script Python. J'ai besoin du maximum de performances et de la flexibilité du script Python, sans avoir besoin de m'exécuter dans l'environnement Python. J'utiliserais ce code pour charger des modules utilisateur à la demande afin de personnaliser mon application.
La solution
- Il existe pyrex qui compile une source semblable à Python pour modules d'extension python
- rpython , qui vous permet de compiler python avec certaines restrictions pour différents systèmes d’alimentation tels que C, LLVM, .Net etc.
- Il existe également un shed-skin qui convertit python en C ++, mais je ne peux pas dire si c'est bon .
- PyPy implémente un compilateur JIT qui tente d'optimiser l'exécution à l'aide de traduire des morceaux de ce qui est en cours d'exécution au moment de l'exécution en code machine, si vous écrivez pour l'interpréteur PyPy, cela pourrait être un chemin réalisable.
- Le même auteur qui travaille sur JIT dans PyPy a écrit psyco pour optimiser le python dans l'interpréteur CPython. .
Autres conseils
Vous pouvez utiliser quelque chose comme py2exe pour compiler votre script python dans un fichier exe ou figer pour un fichier binaire linux.
J'ai eu beaucoup de succès avec Cython , qui repose sur pyrex et étend celui-ci:
Cython est un langage qui fait écrire des extensions C pour le Python langage aussi simple que Python lui-même. Cython est basé sur le célèbre Pyrex, mais supporte plus de pointe fonctionnalités et optimisations.
Le langage Cython est très proche de le langage Python, mais Cython prend également en charge l'appel C fonctions et déclaration des types C sur variables et attributs de classe. Ce permet au compilateur de générer très code C efficace à partir du code Cython.
Cela fait de Cython le langage idéal pour le wrapping des bibliothèques C externes, et pour les modules C rapides qui accélèrent l'exécution du code Python.
Je pense que vous pouvez utiliser Jython pour compiler du bytecode Java en python, puis le compiler avec GCJ.