Avantages:
Premièrement: une obscurcissement léger et vaincu.
Deuxièmement: si la compilation aboutit à un fichier beaucoup plus petit, vous obtiendrez des temps de chargement plus rapides. Sympa pour le web.
Troisièmement: Python peut ignorer l'étape de compilation. Plus rapide à charge initiale. Sympa pour le CPU et le web.
Quatrièmement: plus vous commentez, plus le fichier .pycou .pyosera petit par rapport au .pyfichier source .
Cinquièmement: un utilisateur final avec seulement un .pycou un .pyofichier en main est beaucoup moins susceptible de vous présenter un bogue causé par un changement non annulé dont il a oublié de vous parler.
Sixièmement: si vous visez un système embarqué, l'obtention d'un fichier de plus petite taille à incorporer peut représenter un avantage significatif, et l'architecture est stable, donc un 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 niveau supérieur dans un .pycfichier de cette façon:
python -m py_compile myscript.py
Cela supprime les commentaires. Il laisse docstringsintact. Si vous souhaitez vous en débarrasser docstringségalement (vous voudrez peut-être réfléchir sérieusement à la raison pour laquelle vous faites cela), compilez de cette façon à la place ...
python -OO -m py_compile myscript.py
... et vous obtiendrez un .pyofichier au lieu d'un .pycfichier; également distribuable en termes de fonctionnalités essentielles du code, mais plus petit par la taille du dépouillé docstrings(et moins facile à comprendre pour un emploi ultérieur s'il avait été décent docstringsen premier lieu). Mais voir l'inconvénient trois, ci-dessous.
Notez que python utilise la .pydate du fichier, si elle est présente, pour décider s'il doit exécuter le .pyfichier par opposition au fichier .pycou .pyo--- alors modifiez votre fichier .py, et le .pycou .pyoest obsolète et tous les avantages que vous avez gagnés sont perdus. Vous devez le recompiler afin de récupérer à nouveau le .pycou les .pyoavantages, tels qu'ils peuvent être.
Désavantages:
Premièrement: il y a un "cookie magique" dans .pycet des .pyofichiers qui indique l'architecture système dans laquelle le fichier python a été compilé. Si vous distribuez l'un de ces fichiers dans un environnement d'un type différent, il se cassera. Si vous distribuez le .pycou .pyosans l'associé .pyà recompiler ou touchsi cela remplace le .pycou .pyo, l'utilisateur final ne peut pas le réparer non plus.
Deuxièmement: si vous docstringsignorez l'utilisation de l' -OOoption de ligne de commande décrite ci-dessus, personne ne pourra accéder à ces informations, ce qui peut rendre l'utilisation du code plus difficile (ou impossible).
Troisièmement: l' -OOoption de Python implémente également certaines optimisations selon l' -Ooption de ligne de commande; cela peut entraîner des changements de fonctionnement. Les optimisations connues sont:
sys.flags.optimize = 1
assert les instructions sont ignorées
__debug__ = Faux
Quatrièmement: si vous aviez intentionnellement rendu votre script python exécutable avec quelque chose dans l'ordre de #!/usr/bin/pythonla première ligne, cela est supprimé dans .pycet les .pyofichiers et cette fonctionnalité est perdue.
Cinquièmement: quelque 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.