Wofür stehen die Python-Dateierweiterungen .pyc .pyd .pyo?

435

Was bedeuten diese Python-Dateierweiterungen?

  • .pyc
  • .pyd
  • .pyo

Was sind die Unterschiede zwischen ihnen und wie werden sie aus einer * .py-Datei generiert?

Yanki Twizzy
quelle

Antworten:

480
  1. .py: Dies ist normalerweise der eingegebene Quellcode, den Sie geschrieben haben.
  2. .pyc: Dies ist der kompilierte Bytecode. Wenn Sie ein Modul importieren, erstellt Python eine *.pycDatei, die den Bytecode enthält, um den späteren Import einfacher (und schneller) zu machen.
  3. .pyo: Dies war ein Dateiformat, das vor Python 3.5 für *.pycDateien verwendet wurde, die mit dem -OFlag optimizations ( ) erstellt wurden. (siehe Hinweis unten)
  4. .pyd: Dies ist im Grunde eine Windows-DLL-Datei. http://docs.python.org/faq/windows.html#is-a-pyd-file-the-same-as-a-dll

Weitere Informationen zu .pycvs .pyofinden Sie unter: http://www.network-theory.co.uk/docs/pytut/CompiledPythonfiles.html (Ich habe den wichtigen Teil unten kopiert.)

  • Wenn der Python-Interpreter mit dem Flag -O aufgerufen wird, wird optimierter Code generiert und in '.pyo'-Dateien gespeichert. Das Optimierungsprogramm hilft derzeit nicht viel. Es werden nur Assert-Anweisungen entfernt. Wenn -O verwendet wird, wird der gesamte Bytecode optimiert. .pyc-Dateien werden ignoriert und .py-Dateien werden zu optimiertem Bytecode kompiliert.
  • Wenn Sie zwei -O-Flags an den Python-Interpreter (-OO) übergeben, führt der Bytecode-Compiler Optimierungen durch, die in einigen seltenen Fällen zu fehlerhaften Programmen führen können. Derzeit werden nur __doc__Zeichenfolgen aus dem Bytecode entfernt, was zu kompakteren '.pyo'-Dateien führt. Da einige Programme möglicherweise darauf angewiesen sind, dass diese verfügbar sind, sollten Sie diese Option nur verwenden, wenn Sie wissen, was Sie tun.
  • Ein Programm wird beim Lesen aus einer '.pyc'- oder' .pyo'-Datei nicht schneller ausgeführt als beim Lesen aus einer '.py'-Datei. Das einzige, was bei '.pyc'- oder' .pyo'-Dateien schneller ist, ist die Geschwindigkeit, mit der sie geladen werden.
  • Wenn ein Skript ausgeführt wird, indem sein Name in der Befehlszeile angegeben wird, wird der Bytecode für das Skript niemals in eine '.pyc'- oder' .pyo'-Datei geschrieben. Daher kann die Startzeit eines Skripts reduziert werden, indem der größte Teil seines Codes in ein Modul verschoben wird und ein kleines Bootstrap-Skript vorhanden ist, das dieses Modul importiert. Es ist auch möglich, eine '.pyc'- oder' .pyo'-Datei direkt in der Befehlszeile zu benennen.

Hinweis:

Am 15.09.2015 implementierte die Python 3.5-Version PEP-488 und eliminierte .pyoDateien. Dies bedeutet, dass .pycDateien sowohl nicht optimierten als auch optimierten Bytecode darstellen.

Bill Lynch
quelle
2
Werden die DLL-Dateien aus Python-Skripten oder C / C ++ - Skripten generiert?
Yanki Twizzy
1
@yankitwizzy: Ja. Sie sollten aus C / C ++ - Code generiert werden. Die Datei sollte sich im Maschinencode befinden, daher kann sie nicht direkt aus Python stammen.
Bill Lynch
"Das Optimierungsprogramm hilft derzeit nicht viel. Es entfernt nur Assert-Anweisungen." Bist du dir da sicher? Versuchen Siedef 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: Bin ich mir sicher was? Könnten Sie erklären, was Ihrer Meinung nach Ihr Beispiel zeigt, anstatt nur Code in einen Kommentar zu werfen?
Bill Lynch
9
Beachten Sie, dass in Python 3.5 , PEP 488 implementiert, die mit dem Konzept der beseitigt .pyoDateien. Selbst optimierter Bytecode endet dann mit der .pycErweiterung Python 3.5.
Michael Currie
228
  • .py - Normales Skript
  • .py3 - (selten verwendetes) Python3-Skript. Python3-Skripte enden normalerweise mit ".py", nicht mit ".py3", aber ich habe das einige Male gesehen
  • .pyc - kompiliertes Skript (Bytecode)
  • .pyo - optimierte pyc-Datei (Ab Python3.5 verwendet Python nur pyc anstelle von pyo und pyc)
  • .pyw - Python-Skript zur Ausführung im Fenstermodus ohne Konsole; ausgeführt mit pythonw.exe
  • .pyx - Cython src soll in C / C ++ konvertiert werden
  • .pyd - Python-Skript als Windows-DLL
  • .pxd - Cython-Skript, das einem C / C ++ - Header entspricht
  • .pxi - MyPy-Stub
  • .pyi - Stub-Datei ( PEP 484 )
  • .pyz - Python- Skriptarchiv ( PEP 441 ); Dies ist ein Skript, das komprimierte Python-Skripte (ZIP) in binärer Form nach dem Standard-Python-Skript-Header enthält
  • .pywz - Python- Skriptarchiv für MS-Windows ( PEP 441 ); Dies ist ein Skript, das komprimierte Python-Skripte (ZIP) in binärer Form nach dem Standard-Python-Skript-Header enthält
  • .py [cod] - Platzhalter-Notation in ".gitignore", dh die Datei kann ".pyc", ".pyo" oder ".pyd" sein.
  • .pth - eine Pfadkonfigurationsdatei ; Der Inhalt besteht aus zusätzlichen Elementen (eines pro Zeile), die hinzugefügt werden sollen sys.path. Siehe siteModul.

Eine größere Liste zusätzlicher Python-Dateierweiterungen (meist selten und inoffiziell) finden Sie unter http://dcjtech.info/topic/python-file-extensions/

Devyn Collier Johnson
quelle
11
Es sollte beachtet werden, dass eine «.pyx» -Datei nicht ganz Python-Quelle ist, die in C konvertiert wird, sondern Cython-Quellcode (dh: darauf warten, in C konvertiert zu werden)
Fred Osterrath
Was bedeutet "I" in der PYI-Erweiterung? "Include" / "Implementierung" / "Schnittstelle"?
ChrisFreeman
1
.pyw bedeutet PYthon-Skript, das ein Fenster erstellt, nicht Python 4 Windows. .pyw kann unter * nix
Kotauskas
1
Im Allgemeinen ist .pyw ein Skript, das im Fenstermodus ausgeführt wird, dh ohne Konsolenausgabe. Wie @VladislavToncharov angibt, können sie auf den meisten Plattformen ausgeführt werden, die Python unterstützen, wenn es installiert ist .
Steve Barnes
1
Diese Antwort sollte .pthDateien diskutieren .
wim