Pourquoi comstackr du code Python?

Pourquoi voudriez-vous comstackr un script Python? Vous pouvez les exécuter directement à partir du fichier .py et cela fonctionne bien, donc y a-t-il un avantage de performance ou quelque chose?

Je remarque également que certains fichiers de mon application sont compilés dans .pyc alors que d’autres ne le sont pas. Pourquoi?

    Il est compilé en bytecode qui peut être utilisé beaucoup, beaucoup, beaucoup plus rapidement.

    La raison pour laquelle certains fichiers ne sont pas compilés est que le script principal, que vous python main.py avec python main.py est recompilé à chaque fois que vous exécutez le script. Tous les scripts importés seront compilés et stockés sur le disque.

    Ajout important par Ben Blank :

    Il est important de noter que l’exécution d’un script compilé a un temps de démarrage plus rapide (car il n’est pas nécessaire de le comstackr), mais il ne s’exécute pas plus rapidement.

    Le fichier .pyc est Python qui a déjà été compilé en octet-code. Python exécute automatiquement un fichier .pyc s’il en trouve un avec le même nom qu’un fichier .py que vous appelez.

    “Une introduction à Python” dit ceci à propos des fichiers Python compilés:

    Un programme ne s’exécute pas plus rapidement lorsqu’il est lu depuis un fichier ‘.pyc’ ou ‘.pyo’ que lorsqu’il est lu depuis un fichier ‘.py’; La seule chose qui soit plus rapide à propos des fichiers ‘.pyc’ ou ‘.pyo’ est la vitesse à laquelle ils sont chargés.

    L’avantage d’exécuter un fichier .pyc est que Python n’est pas obligé de le comstackr avant de l’exécuter. Étant donné que Python comstackrait en octet-code avant de lancer un fichier .py de toute façon, il ne devrait pas y avoir d’amélioration des performances.

    Quelle amélioration pouvez-vous obtenir en utilisant des fichiers .pyc compilés? Cela dépend de ce que fait le script. Pour un script très court qui affiche simplement “Hello World”, la compilation pourrait constituer un pourcentage important du temps total de démarrage et d’exécution. Mais le coût de compilation d’un script par rapport à la durée d’exécution totale diminue pour les scripts dont l’exécution est plus longue.

    Le script que vous nommez sur la ligne de commande n’est jamais enregistré dans un fichier .pyc. Seuls les modules chargés par ce script “principal” sont enregistrés de cette manière.

    Plus:

    Premièrement: obfuscation légère et irréversible.

    Deuxièmement: si la compilation génère un fichier beaucoup plus petit, vous obtiendrez des temps de chargement plus rapides. Nice pour le web.

    Troisièmement: Python peut ignorer l’étape de compilation. Plus rapide à la charge initiale. Sympa pour le CPU et le web.

    Quasortingèmement: plus vous commentez, plus le fichier .pyc ou .pyo sera petit par rapport au fichier .py source.

    Cinquièmement, un utilisateur avec un seul fichier .pyc ou .pyo en main est beaucoup moins susceptible de vous présenter un bug causé par un changement non inversé dont il a oublié de vous parler.

    Sixièmement: si vous visez un système embarqué, obtenir un fichier de plus petite taille à intégrer peut représenter un avantage considérable, et l’architecture est stable, donc l’inconvénient, détaillé ci-dessous, n’entre pas en ligne de compte.

    Compilation de haut niveau

    Il est utile de savoir que vous pouvez comstackr un fichier source python de premier niveau dans un fichier .pyc la manière suivante:

     python -m py_comstack myscript.py 

    Cela supprime les commentaires. Il laisse les docssortingngs intacts. Si vous souhaitez vous débarrasser également des docssortingngs (vous pourriez penser sérieusement à ce que vous faites), comstackz-le plutôt à la place …

     python -OO -m py_comstack myscript.py 

    … et vous obtiendrez un fichier .pyo au lieu d’un fichier .pyc ; également dissortingbuable en termes de fonctionnalités essentielles du code, mais plus petite par la taille des docssortingngs dépouillés (et moins facilement comprise pour un emploi ultérieur si elle avait des docssortingngs décentes). Mais voir les trois inconvénients ci-dessous.

    Notez que python utilise la date du fichier .py , s’il est présent, pour décider s’il doit exécuter le fichier .py par opposition au fichier .pyc ou .pyo — modifiez votre fichier .py et le fichier .pyc ou .pyo est obsolète et les avantages que vous avez obtenus sont perdus. Vous devez le recomstackr pour récupérer les avantages .pyc ou .pyo , tels qu’ils peuvent être.

    Désavantages:

    Premièrement: il y a un “cookie magique” dans les .pyc et .pyo qui indique l’architecture du système dans lequel le fichier python a été compilé. Si vous dissortingbuez l’un de ces fichiers dans un environnement d’un autre type, il se cassera. Si vous dissortingbuez le .pyo .pyc ou .pyo sans le .pyo .py associé pour le recomstackr ou le touch afin qu’il remplace le .pyo .pyc ou .pyo , l’utilisateur final ne peut pas non plus le réparer.

    Deuxièmement: si docssortingngs est ignoré avec l’utilisation de l’option de ligne de commande -OO 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’option -OO de Python -OO également certaines optimisations selon l’option de ligne de commande -O ; Cela peut entraîner des changements de fonctionnement. Les optimisations connues sont les suivantes:

    • sys.flags.optimize = 1
    • assert assertions sont ignorées
    • __debug__ = faux

    Quasortingèmement: si vous avez intentionnellement rendu votre script python exécutable avec un ordre de l’ordre de #!/usr/bin/python sur la première ligne, cela est supprimé dans les .pyc et .pyo et cette fonctionnalité est perdue.

    Cinquièmement: quelque peu évident, mais si vous comstackz votre code, non seulement son utilisation peut être affectée, mais la possibilité pour les autres d’apprendre de votre travail est réduite, souvent sévèrement.

    Il y a une augmentation des performances dans l’exécution de python compilé. Cependant, lorsque vous exécutez un fichier .py en tant que module importé, python le comstack et le stocke, et tant que le fichier .py ne change pas, il utilise toujours la version compilée.

    Avec tout langage interpolé lorsque le fichier est utilisé, le processus ressemble à ceci:
    1. Le fichier est traité par l’interpéteur.
    2. Le fichier est compilé
    3. Le code compilé est exécuté.

    De toute évidence, en utilisant du code pré-compilé, vous pouvez éliminer l’étape 2, cela s’applique à python, PHP et autres.

    Voici un article de blog intéressant expliquant les différences http://julipedia.blogspot.com/2004/07/comstackd-vs-interpreted-languages.html
    Et voici une entrée qui explique le processus de compilation Python http://effbot.org/zone/python-comstack.htm

    Il y a certainement une différence de performance lors de l’exécution d’un script compilé. Si vous exécutez des scripts .py normaux, la machine le comstack à chaque exécution et cela prend du temps. Sur les machines modernes, cela est à peine perceptible, mais au fur et à mesure que le script grandit, cela peut devenir plus problématique.

    Comme mentionné précédemment, vous pouvez obtenir une augmentation de performance en compilant votre code python en bytecode. Cela est généralement géré par python lui-même, pour les scripts importés uniquement.

    Une autre raison pour laquelle vous pourriez vouloir comstackr votre code python pourrait être de protéger votre propriété intellectuelle contre la copie et / ou la modification.

    Vous pouvez en savoir plus à ce sujet dans la documentation Python .

    Nous utilisons du code compilé pour dissortingbuer aux utilisateurs qui n’ont pas access au code source. Fondamentalement, pour empêcher les programmeurs inexpérimentés de changer accidentellement quelque chose ou de réparer les bugs sans nous le dire.

    Oui, la performance est la raison principale et, pour autant que je sache, la seule raison.

    Si certains de vos fichiers ne sont pas compilés, peut-être que Python ne peut pas écrire dans le fichier .pyc, peut-être à cause des permissions du répertoire ou de quelque chose. Ou peut-être que les fichiers non compilés ne sont jamais chargés … (les scripts / modules ne sont compilés que lorsqu’ils sont chargés)

    Les débutants supposent que Python est compilé à cause des fichiers .pyc. Le fichier .pyc est le bytecode compilé, qui est ensuite interprété. Donc, si vous avez déjà exécuté votre code Python et que vous avez le fichier .pyc à scope de main, il sera exécuté plus rapidement la deuxième fois, car il ne sera pas nécessaire de recomstackr le bytecode.

    compilateur: un compilateur est un morceau de code qui traduit le langage de haut niveau en langage machine

    Interpreters: les interprètes convertissent également le langage de haut niveau en équivalents binarys lisibles par machine. Chaque fois qu’un interpréteur obtient un code de langage de haut niveau à exécuter, il convertit le code en code intermédiaire avant de le convertir en code machine. Chaque partie du code est interprétée puis exécutée séparément dans une séquence et une erreur est détectée dans une partie du code. Elle interrompt l’interprétation du code sans traduire le prochain ensemble de codes.

    Sources: http://www.toptal.com/python/why-are-there-so-many-pythons http://www.engineersgarage.com/consortingbution/difference-between-comstackr-and-interpreter

    Quelque chose qui n’est pas abordé est la compilation de source à source . Par exemple, nuitka traduit le code Python en C / C ++ et le comstack en code binary qui s’exécute directement sur le processeur, au lieu du code octet Python qui s’exécute sur la machine virtuelle plus lente.

    Cela peut conduire à des accélérations significatives ou vous permettre de travailler avec Python alors que votre environnement dépend du code C / C ++.