|
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.
|
|