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 .pyc
oder .pyo
im Vergleich zur Quelle.py
.
Fünftens: ein Endbenutzer mit nur einem .pyc
oder.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 .pyc
Datei kompilieren können:
python -m py_compile myscript.py
Dadurch werden Kommentare entfernt. Es lässt docstrings
intakt. Wenn Sie das auch loswerden docstrings
mö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 .pyo
Datei anstelle einer .pyc
Datei; 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 .py
das Datum der Datei verwendet, falls vorhanden, um zu entscheiden, ob die .py
Datei im Gegensatz zur Datei .pyc
oder ausgeführt .pyo
werden soll. Bearbeiten Sie also Ihre .py-Datei, und das .pyc
oder .pyo
ist veraltet, und alle Vorteile, die Sie erhalten haben, gehen verloren. Sie müssen es neu kompilieren, um die .pyc
oder die .pyo
Vorteile wieder zu erhalten, wie sie möglicherweise sind.
Nachteile:
Erstens: Es gibt ein "magisches Cookie" .pyc
und .pyo
Dateien, 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 .pyc
oder .pyo
ohne das zugeordnete .py
Neukompilieren verteilen oder touch
es das .pyc
oder ersetzt .pyo
, kann der Endbenutzer es auch nicht reparieren.
Zweitens: Wenn docstrings
die Verwendung der -OO
Befehlszeilenoption wie oben beschrieben übersprungen wird, kann niemand auf diese Informationen zugreifen, was die Verwendung des Codes erschweren (oder unmöglich machen) kann.
Drittens: Die -OO
Option von Python implementiert auch einige Optimierungen gemäß der -O
Befehlszeilenoption. 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/python
in der ersten Zeile ausführbar gemacht haben , wird dies in .pyc
und .pyo
Dateien 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.