Pluspunkte:
Erstens: milde, besiegbare Verschleierung.
Zweitens: Wenn die Kompilierung zu einer erheblich kleineren Datei führt, erhalten Sie schnellere Ladezeiten. Schön für das Web.
Drittens: Python kann den Kompilierungsschritt überspringen. Schneller bei Anfangslast. Schön für die CPU und das Web.
Viertens: Je mehr Sie kommentieren, desto kleiner ist die Datei .pycoder .pyoim Vergleich zur Quelle.py .
Fünftens: ein Endbenutzer mit nur einem .pycoder.pyo Datei in der Hand hat, zeigt Ihnen mit viel geringerer Wahrscheinlichkeit einen Fehler, der durch eine nicht rückgängig gemachte Änderung verursacht wurde, von der er vergessen hat, Ihnen davon zu erzählen.
Sechstens: Wenn Sie auf ein eingebettetes System abzielen, kann das Erhalten einer Datei mit kleinerer Größe zum Einbetten ein erhebliches Plus darstellen, und die Architektur ist stabil, sodass der unten beschriebene Nachteil nicht ins Spiel kommt.
Top Level Compilation
Es ist hilfreich zu wissen, dass Sie eine Python-Quelldatei der obersten Ebene folgendermaßen in eine .pycDatei kompilieren können:
python -m py_compile myscript.py
Dadurch werden Kommentare entfernt. Es lässt docstringsintakt. Wenn Sie das auch loswerden docstringsmöchten (Sie möchten vielleicht ernsthaft darüber nachdenken, warum Sie das tun), kompilieren Sie stattdessen auf diese Weise ...
python -OO -m py_compile myscript.py
... und Sie erhalten eine .pyoDatei anstelle einer .pycDatei; In Bezug auf die wesentliche Funktionalität des Codes gleichermaßen verteilbar, jedoch kleiner um die Größe des abgespeckten Codes docstrings(und für eine spätere Beschäftigung weniger leicht zu verstehen, wenn er anständig wardocstrings ). Aber siehe Nachteil drei unten.
Beachten Sie, dass Python .pydas Datum der Datei verwendet, falls vorhanden, um zu entscheiden, ob die .pyDatei im Gegensatz zur Datei .pycoder ausgeführt .pyowerden soll. Bearbeiten Sie also Ihre .py-Datei, und das .pycoder .pyoist veraltet, und alle Vorteile, die Sie erhalten haben, gehen verloren. Sie müssen es neu kompilieren, um die .pycoder die .pyoVorteile wieder zu erhalten, wie sie möglicherweise sind.
Nachteile:
Erstens: Es gibt ein "magisches Cookie" .pycund .pyoDateien, die die Systemarchitektur angeben, in der die Python-Datei kompiliert wurde. Wenn Sie eine dieser Dateien in eine Umgebung eines anderen Typs verteilen, wird sie beschädigt. Wenn Sie das .pycoder .pyoohne das zugeordnete .pyNeukompilieren verteilen oder touches das .pycoder ersetzt .pyo, kann der Endbenutzer es auch nicht reparieren.
Zweitens: Wenn docstringsdie Verwendung der -OOBefehlszeilenoption wie oben beschrieben übersprungen wird, kann niemand auf diese Informationen zugreifen, was die Verwendung des Codes erschweren (oder unmöglich machen) kann.
Drittens: Die -OOOption von Python implementiert auch einige Optimierungen gemäß der -OBefehlszeilenoption. Dies kann zu Betriebsänderungen führen. Bekannte Optimierungen sind:
sys.flags.optimize = 1
assert Anweisungen werden übersprungen
__debug__ = Falsch
Viertens: Wenn Sie Ihr Python-Skript absichtlich mit etwas in der Reihenfolge #!/usr/bin/pythonin der ersten Zeile ausführbar gemacht haben , wird dies in .pycund .pyoDateien entfernt und diese Funktionalität geht verloren.
Fünftens: etwas offensichtlich, aber wenn Sie Ihren Code kompilieren, kann nicht nur seine Verwendung beeinträchtigt werden, sondern das Potenzial für andere, aus Ihrer Arbeit zu lernen, wird häufig erheblich verringert.