Wie kompiliere ich eine Python-Datei?

57

Ich habe angefangen, Python zu lernen und bin auch ein neuer Benutzer von Ubuntu. Ich muss wissen, wie die .pyDateien kompiliert werden. Ich habe es mit dem Befehl versucht

python "hello.py"

Was sind die anderen Möglichkeiten, um Python zu kompilieren?

Bharath Lakshman
quelle

Antworten:

58

Neben Bryans Antwort py_compilekann das Modul auf folgende Weise als Skript ausgeführt werden , wenn Sie lediglich eine Datei oder mehrere Dateien von einem Terminal aus kompilieren möchten :

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

Yamaho
quelle
9
Wenn Sie kompilieren, weil Sie Geschwindigkeit möchten, können Sie auch das -OFlag hinzufügen python -O -m py_compile …, mit dem "grundlegende Optimierungen aktiviert werden". Es entfernt hauptsächlich assertAnweisungen und if __debug__Code, so dass es für die meisten Codes keine Auswirkungen hat. Weitere Informationen finden Sie unter man pythonund „Was macht die Python-Optimierung?“ .
Rory O'Kane
26

Beachten Sie auch, dass Sie keine Datei kompilieren müssen , um .pysie auszuführen. Python ist eine interpretierte Sprache, und Sie können die Skripte direkt ausführen, indem Sie Folgendes verwenden:

python hello.py

Oder machen Sie Ihr Skript ausführbar, indem Sie #!/usr/bin/env pythones oben im Skript einfügen, die Datei mit ausführbar machen chmod +x hello.pyund dann ausführen :

./hello.py

Die Tatsache, dass Python Ihr .pySkript .pycaus Leistungsgründen intern zu Bytecode- Dateien kompiliert, ist ein Implementierungsdetail. Wenn Sie keinen triftigen Grund dafür haben, lassen Sie Python selbst entscheiden, wann und ob es kompiliert werden soll.

MestreLion
quelle
Ich bin verwirrt, warum das funktioniert. Muss der Python-Interpreter das Skript nicht lesen können, um es auszuführen? Wenn Sie nur execute permission ( chmod +x) geben, wie liest der Interpreter das Skript?
yellow01
@ yellow01: Wenn Sie ein Skript ausführen, das einen "shebang" enthält, dh die erste Zeile beginnt mit #!/path/to/interpreter, führt der Kernel das aus, was dort deklariert ist, und übergibt den Skriptpfad als Argument. In meinem Beispiel ist, wenn Sie ausführen, ./hello.pywas tatsächlich ausgeführt wird /usr/bin/env python ./hello.py. Siehe en.wikipedia.org/wiki/Shebang_(Unix)
MestreLion
@ yellow01 Sie haben Recht, dass der Interpreter Leserechte benötigt, sobald er durch den von MestreLion beschriebenen Prozess gestartet wurde. Allerdings chmod +xgewährt ausführen, und nicht vorhandene Berechtigungen berühren so vermutlich ist es zusätzlich lesbar jetzt ausführbar ist.
Spectras
11

Check out this link In Python kompilieren

In der Mitte der Seite wird über das py_compile-Modul gesprochen, das importiert werden kann. Die Syntax lautet wie folgt:

import py_compile

py_compile.compile("file.py")

Diese Kompilierungsmethode führt das Modul auch nicht aus wie das Ausführen von python file.py.

Es gibt auch eine Methode, die einen gesamten Verzeichnisbaum kompiliert, aber ich lasse Sie den Link überprüfen, um zu sehen, wie das ausgeführt wird.

Hoffe das hilft.

Bryan
quelle
4

Sie können Python-Skripte mit verschiedenen Methoden zu einem Binärcode kompilieren, aber ich habe herausgefunden, dass die Verwendung von Nuitka effizienter ist.

Nuitka ist ein Python-zu-C ++ - Compiler, der fast alle Versionen von Python unterstützt.

Die Befehlssyntax ist so einfach wie

nuitka hello.py

Goto http://nuitka.net/doc/user-manual.html für weitere Informationen.

salafi
quelle
6
Effizienter wie? Warum sollte jemand es benutzen wollen?
muru
nuitka ist in der Tat sehr nützlich - zum Beispiel können Sie Python-Programme an Computer senden, auf denen Python nicht installiert ist. Aber wenn nuitka Python-Programme in C ++ kompiliert, können Sie dies umgehen.
user258532