Co oznaczają rozszerzenia plików python, .pyc .pyd .pyo?

436

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?

Yanki Twizzy
źródło

Odpowiedzi:

481
  1. .py: Zazwyczaj jest to wejściowy kod źródłowy, który napisałeś.
  2. .pyc: To jest skompilowany kod bajtowy. Jeśli zaimportujesz moduł, Python zbuduje *.pycplik zawierający kod bajtowy, aby ułatwić późniejsze (i szybsze) importowanie go.
  3. .pyo: To był format pliku używany przed Pythonem 3.5 dla *.pycplików utworzonych za pomocą -Oflagi optimizations ( ). (patrz uwaga poniżej)
  4. .pyd: Jest to w zasadzie plik DLL systemu Windows. http://docs.python.org/faq/windows.html#is-a-pyd-file-the-same-as-a-dll

W celu dalszej dyskusji na temat .pycvs .pyozapoznaj 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 .pyopliki. Oznacza to, że .pycpliki reprezentują zarówno niezoptymalizowany, jak i zoptymalizowany kod bajtowy.

Bill Lynch
źródło
2
Czy pliki DLL są generowane ze skryptów Python lub skryptów c / c ++?
Yanki Twizzy
1
@yankitwizzy: Tak. Powinny być generowane z kodu C / C ++. Plik powinien mieć kod maszynowy, więc nie może być bezpośrednio z Pythona.
Bill Lynch,
„Optymalizator obecnie niewiele pomaga, usuwa tylko instrukcje aser.”. Jesteś tego pewien? Spróbujdef 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));
Jorge Leitao
@ JCLeitão: Czy jestem pewien czego? Czy możesz wyjaśnić, co według ciebie pokazuje twój przykład, zamiast po prostu wstawiać kod w komentarzu.
Bill Lynch
9
Należy zauważyć, że w Pythonie 3.5 , PEP 488 jest realizowany, co eliminuje z koncepcją .pyoplików. Nawet zoptymalizowany kod bajtowy kończy się wtedy .pycrozszerzeniem Python 3.5.
Michael Currie,
228
  • .py - Zwykły skrypt
  • .py3 - (rzadko używany) skrypt Python3. Skrypty w języku Python3 zwykle kończą się na „.py”, a nie „.py3”, ale widziałem to już kilka razy
  • .pyc - skompilowany skrypt (Bytecode)
  • .pyo - zoptymalizowany plik pyc (od wersji Python 3.5 Python używa tylko pyc zamiast pyo i pyc)
  • .pyw - skrypt Pythona do działania w trybie okienkowym, bez konsoli; wykonane za pomocą pythonw.exe
  • .pyx - Cython src do konwersji na C / C ++
  • .pyd - skrypt Pythona wykonany jako biblioteka DLL systemu Windows
  • .pxd - skrypt Cython odpowiadający nagłówkowi C / C ++
  • .pxi - odcinek MyPy
  • .pyi - plik pośredniczący ( PEP 484 )
  • .pyz - archiwum skryptów w języku Python ( PEP 441 ); jest to skrypt zawierający skompresowane skrypty Pythona (ZIP) w formie binarnej po standardowym nagłówku skryptu Python
  • .pywz - archiwum skryptów Python dla MS-Windows ( PEP 441 ); jest to skrypt zawierający skompresowane skrypty Pythona (ZIP) w formie binarnej po standardowym nagłówku skryptu Python
  • .py [cod] - notacja wieloznaczna w „.gitignore”, co oznacza, że ​​plik może mieć postać „.pyc”, „.pyo” lub „.pyd”.
  • .pth - plik konfiguracyjny ścieżki; jego zawartość to dodatkowe elementy (po jednym w wierszu) do dodania sys.path. Zobacz sitemoduł.

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/

Devyn Collier Johnson
źródło
11
Należy zauważyć, że plik «.pyx» nie jest całkiem źródłem Pythona, które jest konwertowane do C, ale raczej kodem źródłowym Cython (tzn. Czekającym na konwersję do C)
Fred Osterrath
Co oznacza „I” w rozszerzeniu PYI? „Uwzględnij” / „Implementacja” / „Interfejs”?
ChrisFreeman,
1
.pyw oznacza skrypt PYthon, który tworzy okno, a nie Windows Python 4. .pyw można wykonać pod * nix
Kotauskas,
1
Ogólnie .pyw jest skryptem do uruchamiania w trybie okienkowym, tzn. Bez wyjścia konsoli. Jak stwierdza @VladislavToncharov, można je uruchamiać na większości platform obsługujących Python, jeśli jest zainstalowany .
Steve Barnes,
1
Ta odpowiedź powinna omawiać .pthpliki.
wim