Co oznaczają te rozszerzenia plików Python?
- .pyc
- .pyd
- .pyo
Jakie są między nimi różnice i jak są one generowane z pliku * .py?
Co oznaczają te rozszerzenia plików Python?
Jakie są między nimi różnice i jak są one generowane z pliku * .py?
Odpowiedzi:
.py
: Zazwyczaj jest to wejściowy kod źródłowy, który napisałeś..pyc
: To jest skompilowany kod bajtowy. Jeśli zaimportujesz moduł, Python zbuduje *.pyc
plik zawierający kod bajtowy, aby ułatwić późniejsze (i szybsze) importowanie go..pyo
: To był format pliku używany przed Pythonem 3.5 dla *.pyc
plików utworzonych za pomocą -O
flagi optimizations ( ). (patrz uwaga poniżej).pyd
: Jest to w zasadzie plik DLL systemu Windows. http://docs.python.org/faq/windows.html#is-a-pyd-file-the-same-as-a-dllW celu dalszej dyskusji na temat .pyc
vs .pyo
zapoznaj się z: http://www.network-theory.co.uk/docs/pytut/CompiledPythonfiles.html (skopiowałem ważną część poniżej)
- Po wywołaniu interpretera języka Python z flagą -O generowany jest zoptymalizowany kod i zapisywany w plikach „.pyo”. Optymalizator obecnie niewiele pomaga; usuwa tylko instrukcje aser. Gdy używane jest -O, cały kod bajtowy jest zoptymalizowany; Pliki .pyc są ignorowane, a pliki .py są kompilowane do zoptymalizowanego kodu bajtowego.
- Przekazywanie dwóch flag -O do interpretera języka Python (-OO) spowoduje, że kompilator kodu bajtowego wykona optymalizacje, które w niektórych rzadkich przypadkach mogą spowodować nieprawidłowe działanie programów. Obecnie tylko
__doc__
ciągi znaków są usuwane z kodu bajtowego, co powoduje, że pliki „.pyo” są bardziej kompaktowe. Ponieważ niektóre programy mogą polegać na ich dostępności, powinieneś korzystać z tej opcji tylko wtedy, gdy wiesz, co robisz.- Program nie działa szybciej, gdy jest czytany z pliku „.pyc” lub „.pyo” niż gdy jest czytany z pliku „.py”; jedyną rzeczą, która jest szybsza w plikach „.pyc” lub „.pyo”, jest szybkość ich ładowania.
- Gdy skrypt jest uruchamiany przez podanie jego nazwy w wierszu poleceń, kod bajtowy skryptu nigdy nie jest zapisywany w pliku „.pyc” lub „.pyo”. Dlatego czas uruchamiania skryptu można skrócić, przenosząc większość jego kodu do modułu i mając mały skrypt ładujący, który importuje ten moduł. Można również nazwać plik „.pyc” lub „.pyo” bezpośrednio w wierszu polecenia.
Uwaga:
15.09.2015 w wersji Python 3.5 zaimplementowano PEP-488 i wyeliminowano .pyo
pliki. Oznacza to, że .pyc
pliki reprezentują zarówno niezoptymalizowany, jak i zoptymalizowany kod bajtowy.
def f(x): assert(x**5 == x*x*x*x*x); return x; import timeit; print(timeit.repeat("for x in range(100): f(x)", "from __main__ import f", number=10000));
.pyo
plików. Nawet zoptymalizowany kod bajtowy kończy się wtedy .pyc
rozszerzeniem Python 3.5.
sys.path
. Zobacz site
moduł.Większą listę dodatkowych rozszerzeń plików Python (najczęściej rzadkich i nieoficjalnych) można znaleźć na stronie http://dcjtech.info/topic/python-file-extensions/
.pth
pliki.