Pour accélérer de manière importante le temps de lancement des petits
programmes qui utilisent beaucoups de modules standard, si un fichier
appelé "spam.pyc" existe dans le répertoire où "spam.py" se
trouve, il est supposé contenir une version du module spam
déjà compilée ``en byte-code'' L'heure de modification de la version de
"spam.py" employée pour créer "spam.pyc" est enregistrée dans
"spam.pyc", et le fichier est ignoré si ceux-ci ne s'accordent
pas.
Normalement, vous n'avez rien à faire pour créer le fichier
"spam.pyc". Toutes les fois que "spam.py" est compilé avec
succès, une tentative est faite pour écrire la version compilée sur
"spam.pyc". Il n'y a pas d'erreur si cette tentative échoue; si
pour une raison quelconque le fichier n'est pas écrit complètement, le
fichier "spam.pyc" résultant sera identifié comme incorrect et
ainsi ignoré plus tard. Le contenu du fichier "spam.pyc" est
indépendant de la plate-forme, ainsi un répertoire de module de Python
peut être partagé par des machines d'architectures différentes.
Quelques trucs pour les experts:
- Quand l'interpréteur de Python est appelé avec l'indicateur
-O, du code optimisé est produit et enregistré dans des
fichiers ".pyo". L'optimiseur actuel n'aide pas beaucoup; il
retire seulement les instructions assert et des
instructions SET_LINENO. Quand -O est utilisé,
tout le byte-code est optimisé; les fichiers pyc sont
ignorés et des fichiers py sont compilés en byte-code
optimisé.
- Un programme ne fonctionne pas plus rapidement quand on le
charge depuis un fichier "`.pyc'" ou ".pyo" que quand on
le charge depuis un ".py"; la seule chose qui est plus rapide
pour les fichiers ".pyc" ou ".pyo" est la vitesse à
laquelle ils sont chargés.
- Quand un script est exécuté en donnant son nom sur la ligne de
commande, le byte-code pour le script n'est jamais écrit dans un
fichier ".pyc" ou ".pyo". Ainsi, le temps de démarrage
d'une séquence type peut être réduit en déplaçant la majeure partie
de son code dans un module et en ayant un petit script d'amorce
qui importe ce module.
- Il est possible d' avoir un fichier appelé "spam.pyc" (ou
"spam.pyo" quand -O est utilisé) sans module
"spam.py" dans le même module. Ceci peut être employé pour
distribuer une bibliothèque de code Python sous une forme qui est
moyennement difficile à décompiler.
- Le module compileall peut
créer des fichiers ".pyc" (ou des fichiers ".pyo" quand
-O est utilisé) pour tous les modules présents dans un
répertoire.