Plusy:
Po pierwsze: łagodne, możliwe do pokonania zaciemnienie.
Po drugie: jeśli kompilacja spowoduje znacznie mniejszy plik, otrzymasz krótszy czas ładowania. Ładne dla sieci.
Po trzecie: Python może pominąć krok kompilacji. Szybszy przy początkowym obciążeniu. Ładne dla procesora i sieci.
Po czwarte: im więcej komentujesz, tym mniejszy jest plik .pyclub .pyow porównaniu do źródła.py pliku .
Po piąte: użytkownik końcowy posiadający tylko a .pyclub.pyo plik w ręku, znacznie rzadziej przedstawia ci błąd, który spowodował przez nieodwróconą zmianę, o której zapomniał ci powiedzieć.
Po szóste: jeśli dążysz do systemu osadzonego, uzyskanie mniejszego rozmiaru pliku do osadzenia może stanowić znaczący plus, a architektura jest stabilna, więc wada, opisana poniżej, nie wchodzi w grę.
Kompilacja na najwyższym poziomie
Warto wiedzieć, że można skompilować plik źródłowy Pythona najwyższego poziomu do .pycpliku w ten sposób:
python -m py_compile myscript.py
To usuwa komentarze. Pozostawia docstringsnietknięty. Jeśli chcesz się tego pozbyć docstrings(możesz poważnie zastanowić się, dlaczego to robisz), a następnie skompiluj w ten sposób ...
python -OO -m py_compile myscript.py
... a otrzymasz .pyoplik zamiast .pycpliku; równomiernie dystrybuowany pod względem podstawowej funkcjonalności kodu, ale mniejszy ze względu na rozmiar okrojony docstrings(i mniej zrozumiały dla późniejszego zatrudnienia, gdyby był przyzwoitydocstrings ). Ale patrz wada trzecia poniżej.
Zauważ, że Python używa daty .pypliku, jeśli jest obecny, aby zdecydować, czy powinien on wykonać .pyplik, a nie plik .pyclub .pyo--- - więc edytuj plik .py, a .pyclub .pyojest przestarzały, a wszelkie korzyści, które uzyskałeś, zostaną utracone. Musisz go ponownie skompilować, aby ponownie odzyskać korzyści .pyclub .pyokorzyści, takie jak mogą być.
Wady:
Po pierwsze: istnieje „magiczne ciasteczko” .pyci .pyopliki, które wskazują architekturę systemu, w której skompilowano plik python. Jeśli rozpowszechnisz jeden z tych plików w środowisku innego typu, ulegnie on awarii. Jeśli dystrybuujesz plik skojarzony .pyclub .pyobez niego w .pycelu ponownej kompilacji touch, zastępuje on .pyclub .pyo, użytkownik końcowy również nie może go naprawić.
Po drugie: jeśli docstringszostaną pominięte przy użyciu -OOopcji wiersza polecenia, jak opisano powyżej, nikt nie będzie w stanie uzyskać tych informacji, co może utrudnić (lub uniemożliwić) użycie kodu.
Po trzecie: -OOopcja Pythona implementuje również pewne optymalizacje zgodnie z -Oopcją wiersza poleceń; może to spowodować zmiany w działaniu. Znane optymalizacje to:
sys.flags.optimize = 1
assert instrukcje są pomijane
__debug__ = Fałsz
Po czwarte: jeśli celowo sprawiłeś, że twój skrypt Pythona jest wykonywalny z czymś w kolejności #!/usr/bin/pythonw pierwszym wierszu, zostanie on rozebrany .pyci .pyopliki, a funkcjonalność zostanie utracona.
Po piąte: nieco oczywiste, ale jeśli skompilujesz swój kod, nie tylko wpłynie to na jego użycie, ale również zmniejszy, często poważnie, możliwość uczenia się z pracy przez innych.