Votre navigateur n'est pas à jour !

Merci de mettre à jour votre navigateur pour utiliser mon blog. Mettre à jour mon navigateur maintenant

×

Python -La signification des extensions .pyo

Date de publication 26 juil. 2022
Sur les versions antérieures à python 3.5 l'interpréteur nous donnait la possibilité de générer du binaire optimisé dans un fichier spécifique pyo.
L'interpréteur python (par défaut CPython) peut recevoir une option :
- -O pour générer un fichier optimisé
- -OO la même chose que -O mais en enlevant les valeurs de __doc__

On peut également enregistrer cette valeur dans une variable d'environnement
  • PYTHONOPTIMIZE=0 (pas d'option)
  • PYTHONOPTIMIZE=1 est équivalent à -O
  • PYTHONOPTIMIZE=2 est équivalent à -OO
Pour forcer la génération du bytecode il suffit d'appeler le module compileall qui est une librairie standard. Et vous voyez la génération des fichiers optimisés dans le dossier __cache__

$ ls -l __pycache__/
-rw-r--r-- 1 david david 119 juil. 25 12:34 file.cpython-310.opt-1.pyc

Dans le nom du fichier optimisé on retrouve
  • le fichier : file
  • l'interpréteur : CPython
  • la version du python : 3.10
  • l'option d'optimisation : opt-1 ou opt-2
  • l'extension : pyc (car en python >=3.5 le pyo n'est pas utilisé, l'optimisation est comprise dans le pyc)
Lorsque cette option est activée, par exemple il n'est pas possible d'utiliser pdb car __debug__ vaudra False

Un autre point à connaître est la suppression des
assert
lorsque le flag est utilisé

Voici le cas d'exemple

Et celui avec l'optimisation

Il est important de préciser que de passer par un pyo ou même pyc ne rend pas le programme plus rapide, mais le charge plus rapidement en mémoire



Sur les dernières versions de python il n'est pas recommandé d'utiliser cette option : PEP 488
blog comments powered by Disqus