Comment compiler un fichier python?

57

J'ai commencé à apprendre le python et je suis également un nouvel utilisateur d'Ubuntu. J'ai besoin de savoir comment compiler les .pyfichiers. J'ai essayé avec la commande

python "hello.py"

Quels sont les autres moyens de compiler Python?

Bharath Lakshman
la source

Réponses:

58

En ajoutant à la réponse de Bryan, si vous souhaitez simplement compiler un fichier ou un groupe de fichiers à partir d'un terminal, le py_compilemodule peut être exécuté en tant que script de la manière suivante:

python -m py_compile fileA.py fileB.py fileC.py ...

Yamaho
la source
9
Si vous compilez parce que vous voulez de la vitesse, vous pouvez également ajouter le -Odrapeau, comme python -O -m py_compile …«qui activera les optimisations de base». Il supprime principalement les assertinstructions et le if __debug__code. Par conséquent, il n’a aucun effet sur la plupart des codes. Voir man pythonet «Que fait l'optimisation Python…?» Pour plus de détails.
Rory O'Kane
26

Sachez également que vous n'avez pas besoin de compiler un .pyfichier pour l'exécuter. Python est un langage interprété, et vous pouvez exécuter les scripts directement, en utilisant:

python hello.py

Ou bien, exécutez votre script en ajoutant #!/usr/bin/env pythonen haut du script, en rendant le fichier exécutable avec chmod +x hello.py, puis en exécutant:

./hello.py

Le fait que Python compile en interne votre .pyscript en .pycfichiers bytecode pour des raisons de performances est un détail d'implémentation, et à moins que vous n'ayez une bonne raison de le faire, laissez-le python décider lui-même du moment et du moment de la compilation.

MestreLion
la source
Je suis confus quant à pourquoi cela fonctionne. L'interpréteur Python n'a-t-il pas besoin de savoir lire le script pour l'exécuter? Si vous n'accordez que la permission d'exécution ( chmod +x), comment l'interprète lit-il le script?
yellow01
@ yellow01: lorsque vous exécutez un script contenant un "shebang", c'est-à-dire que la première ligne commence par #!/path/to/interpreter, le noyau exécute tout ce qui y est déclaré, en passant le chemin du script sous forme d'argument. Dans mon exemple, lorsque vous exécutez ./hello.pyce qui est réellement exécuté, c’est /usr/bin/env python ./hello.py. Voir en.wikipedia.org/wiki/Shebang_(Unix)
MestreLion
@ yellow01 vous avez raison de dire que l'interprète aura besoin d'autorisations de lecture une fois lancé via le processus décrit par MestreLion. Cependant, chmod +xles droits accordés sont exécutés et ne touchent pas les droits existants; ils sont donc lisibles en plus d’être exécutables.
spectras
11

Découvrez ce lien Compiler en Python

Au milieu de la page, il est question du module py_compile pouvant être importé. La syntaxe est la suivante:

import py_compile

py_compile.compile("file.py")

Cette méthode de compilation n'exécutera pas le module, pas plus que l'exécution de python fichier.py.

Il existe également une méthode qui compile une arborescence de répertoires complète, mais je vous laisse consulter le lien pour voir comment cela s'exécute.

J'espère que cela t'aides.

Bryan
la source
4

Vous pouvez compiler des scripts Python en un code binaire en utilisant différentes méthodes, mais j'ai découvert qu'utiliser Nuitka était plus efficace.

Nuitka est un compilateur Python-to-C ++ qui supporte presque toutes les versions de python.

La syntaxe de la commande est aussi simple que

nuitka hello.py

Allez à http://nuitka.net/doc/user-manual.html pour plus d'informations.

salafi
la source
6
Plus efficace comment? Pourquoi quelqu'un voudrait-il l'utiliser?
muru
nuitka est en effet très utile - par exemple, il vous permet de livrer des programmes Python aux ordinateurs sur lesquels Python n’est pas installé. Mais alors que nuitka compile les programmes Python en code machine C ++, vous pouvez le contourner.
user258532