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?

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.


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/


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.