L'interpréteur Python dispose
d'une fonctionnalité permettant de mettre en cache la phase de compilation d'un
fichier source. Cela se traduit par la création de fichiers avec
l'extension .pyc, placés au même niveau que les fichiers .py correspondant.
Ceux-ci contiennent alors le bytecode résultant de la compilation. Cela
permet d'améliorer la vitesse de chargement d'un module lors de sa prochaine
invocation (mais non sa vitesse d'exécution).
Par défaut, Python effectue automatiquement cette opération pour les fichiers
sources composant un module lors de son chargement. Il est nécessaire que le
répertoire contenant les fichiers soit accessible en écriture par l'utilisateur
invoquant Python, afin de pouvoir écrire les fichiers .pyc. Cela n'est pas
forcément le cas pour les modules fournis par une distribution Linux par
exemple, qui vont être installés dans une arborescence système, comme
/usr/lib. Ou alors dans le cas d'une application web, où le serveur web n'a
pas accès en écriture aux fichiers sources.
Afin de contourner cette limitation, il est possible de pre-créer les fichiers
.pyc sans même exécuter le code correspondant. Cela nécessite d'utiliser le
module compileall. Voici un exemple d'utilisation pour pré-compiler tous les
fichiers du répertoire mymodule :
python -m compileall ./mymodule
A noter qu'il est possible d'obtenir un niveau d'optimisation supplémentaire en
invoquant Python avec l'option -o. Les fichiers compilés auront alors
l'extention .pyo.