Les avantages :
Tout d'abord, un obscurcissement léger et maîtrisable.
Deuxièmement, si la compilation donne lieu à un fichier nettement plus petit, vous obtiendrez des temps de chargement plus rapides. Une bonne chose pour le web.
Troisièmement : Python peut sauter l'étape de la compilation. Plus rapide à la charge initiale. Une bonne chose pour le CPU et le web.
Quatrièmement, plus vous commentez, plus le nombre de commentaires est réduit. .pyc
o .pyo
sera par rapport à la source .py
fichier.
Cinquièmement : un utilisateur final avec seulement un .pyc
o .pyo
en main est beaucoup moins susceptible de vous présenter un bogue causé par une modification non rétablie dont ils ont oublié de vous parler.
Sixièmement : si vous visez un système embarqué, obtenez une taille plus petite de à intégrer peut représenter un avantage significatif, et l'architecture est stable, donc le premier inconvénient, détaillé ci-dessous, n'entre pas en jeu.
Compilation de haut niveau
Il est utile de savoir que vous pouvez compiler un fichier source python de haut niveau dans un fichier .pyc
de cette façon :
python -m py_compile myscript.py
Cela supprime les commentaires. Il laisse docstrings
intact. Si vous souhaitez vous débarrasser de la docstrings
(vous devriez réfléchir sérieusement à la raison pour laquelle vous faites cela), puis compilez de cette façon...
python -OO -m py_compile myscript.py
...et vous obtiendrez un .pyo
au lieu d'un fichier .pyc
tout aussi distribuable en termes de fonctionnalité essentielle du code, mais plus petit en raison de la taille de la version dépouillée du fichier docstrings
(et moins facile à comprendre pour un emploi ultérieur s'il avait été décent). docstrings
en premier lieu). Mais voir le troisième inconvénient, ci-dessous.
Notez que python utilise l'option .py
la date du fichier, si elle est présente, pour décider s'il doit exécuter la commande .py
par opposition au fichier .pyc
o .pyo
--- donc modifiez votre fichier .py, et le fichier .pyc
o .pyo
est obsolète et tous les avantages que vous avez obtenus sont perdus. Vous devez le recompiler afin d'obtenir la .pyc
o .pyo
les avantages qui en découlent, tels qu'ils peuvent être.
Inconvénients :
Premièrement : Il y a un "cookie magique" dans .pyc
y .pyo
qui indique l'architecture du système dans lequel le fichier python a été compilé. Si vous distribuez l'un de ces fichiers dans un environnement d'un type différent, il sera cassé. Si vous distribuez le fichier .pyc
o .pyo
sans les frais associés .py
pour recompiler ou touch
il remplace donc le .pyc
o .pyo
l'utilisateur final ne peut pas non plus le réparer.
Deuxièmement : si docstrings
sont ignorés avec l'utilisation de l'option -OO
comme décrit ci-dessus, personne ne pourra accéder à ces informations, ce qui peut rendre l'utilisation du code plus difficile (ou impossible).
Troisièmement, le programme Python -OO
met également en œuvre certaines optimisations conformément à l'option -O
option de ligne de commande ; cela peut entraîner des changements dans le fonctionnement. Les optimisations connues sont :
-
sys.flags.optimize
= 1
-
assert
les déclarations sont ignorées
-
__debug__
= Faux
Quatrièmement : si vous aviez intentionnellement rendu votre script python exécutable avec quelque chose de l'ordre de #!/usr/bin/python
sur la première ligne, celle-ci est supprimée dans le fichier .pyc
y .pyo
et cette fonctionnalité est perdue.
Cinquièmement : c'est un peu évident, mais si vous compilez votre code, non seulement son utilisation peut être affectée, mais le potentiel des autres à apprendre de votre travail est réduit, souvent sévèrement.
0 votes
Vous pouvez également noter que, outre le démarrage plus rapide de votre application, vous gagnez également en sécurité, si vous ne pouvez pas partager votre code s'il s'agit d'un secret d'entreprise.
1 votes
@PSyLoCKe Vous n'en avez vraiment, vraiment pas. Le bytecode Python est vraiment lisible, parce que le compilateur n'a pas besoin de l'obscurcir pour l'optimiser. (Non pas qu'il l'optimise beaucoup...)
1 votes
La raison pour laquelle certains fichiers sont compilés automatiquement est parce qu'ils sont importés ; par exemple, si vous utilisez
import mylib.py
Python compileramylib.py
afin que les futursimport
les déclarations courent un peu plus vite. Si vous modifiez ultérieurementmylib.py
alors il sera recompilé la prochaine fois qu'il sera importé (Python utilise la date du fichier pour s'assurer que cela se produit).