SAMOUCZEK JĘZYKA PYTHON ROZDZIAŁY   
Rozdział 5: Moduły

1: Co to jest moduł? - 2: Ścieżka poszukiwań modułów - 3: Skompilowane pliki Pythona - 4: Moduły standardowe
5: Funkcja dir() - 6: Pakiety - 7: Importowanie * z pakietu - 8: Odniesienia pomiędzy pakietami


Lekcja 3: Skompilowane pliki Pythona


Ważnym czynnikiem przyspieszenia rozruchu dla małych programów, które używają mnóstwo standardowych modułów jest obecność pliku fibo.pyc. W pliku tym zawarta jest skompilowana już "bajt-kodowa" (ang. byte-coded) wersja modułu spam. Czas modyfikacji wersji pliku fibo.py, z którego powstał fibo.pyc, jest zarejestrowany w tymże ostatnim. Plik .pyc jest ignorowany, jeżeli oba te czasy nie pasują do siebie. Innymi słowy: używany jest .pyc jeśli data modyfikacji .py jest wcześniejsza od daty modyfikacji .pyc.

W normalnych warunkach, nie trzeba zrobić nic szczególnego, aby utworzyć plik pomyje.pyc. Kiedykolwiek pomyje.py zostało pomyślnie skompilowane, interpreter usiłuje zapisać skompilowana wersję do pomyje.pyc. Nie ma błędu, jeśli zapis się nie powiedzie. Jeżeli z jakiegokolwiek powodu plik ten nie został zapisany, to pomyje.pyc zostanie rozpoznane jako niepoprawny i zignorowany. Zawartość pomyje.pyc jest niezależna od platformy, tak więc katalog modułów może być dzielony pomiędzy maszynami o różnej architekturze (zazwyczaj wersje interpretera muszą być te same).

Parę wskazówek dla ekspertów:

  • Gdy interpreter Pythona wywołany został z flagą -O, wygenerowany zostanie zoptymalizowany kod i umieszczony w plikach .pyo. Obecnie, optymalizator nie robi żadnych rewelacyjnych rzeczy: usuwa tylko instrukcje assert i instrukcje SET_LINENO. Gdy używasz -O, cały kod pośredni jest optymalizowany, pliki .pyc są ignorowane, a pliki .py kompilowane do zoptymalizowanego kodu pośredniego.

  • Wywołanie interpretera z dwoma flagami -O (-OO) spowoduje optymalizację kodu, która w pewnych przypadkach objawi się w wadliwym działaniu programu. Obecnie tylko napisy __doc__ usuwane są z kodu pośredniego, co objawia się mniejszymi plikami .pyo. Ponieważ działanie niektórych programów może zależeć od obecności tych zmiennych, powinno się używać tej opcji tylko wtedy gdy jest się pewnym, co się robi.

  • Program nie działa szybciej, gdy czytany jest z pliku .pyc lub .pyo, w porównaniu gdy czytany jest z pliku .py: jedyne co jest szybsze, to prędkość ładowania plików.

  • W przypadku gdy nazwa skryptu podana jest w linii poleceń, kod pośredni dla niego nigdy nie zostanie zapisany w pliku .pyo. Tak więc, czas rozruchu skryptu może być zredukowany poprzez przesunięcie większości kodu do modułów, pozostawiając mały skrypt rozruchowy importujący te moduły.

  • Możliwe jest posiadanie pliku fibo.pyc (lub fibo.pyo gdy używasz -O) bez modułu fibo.py. Ma to zastosowanie w przypadku dystrybucji bibliotek Pythona w formie, która ma sprawić trudności w procesie «reverse engineering».

  • Moduł compileall może zostać użyty do stworzenia plików .pyc (lub .pyo gdy użyto -O) dla wszystkich modułów z podanego katalogu.
Strona główna - O Pythonie - Interpreter - Samouczek - Przykłady programów - Linki