Was ist das PYO-Dateiformat?
Eine .pyo-Datei ist eine veraltete optimierte Python-Bytecode-Datei, die vom CPython-Interpreter erstellt wird, wenn er mit dem Flag -O (optimize) oder -OO ausgeführt wird. Die Übergabe von -O entfernt assert-Anweisungen aus dem kompilierten Bytecode; die Übergabe von -OO entfernt zusätzlich alle Docstrings, was die Dateigröße geringfügig reduziert.
Intern sind .pyo-Dateien vom Format her Byte für Byte identisch mit .pyc-Dateien: ein 16-Byte-Header (4-Byte versionsspezifische Magic Number, 4-Byte Flags-Feld, 4-Byte Zeitstempel oder Quell-Hash, 4-Byte Quellgröße), gefolgt von einem gemarshallten CPython-Code-Objekt. Die Optimierungsstufe spiegelt sich nur im kompilierten Inhalt wider - niemals im Datei-Header.
Die Dateiendung .pyo wurde in Python 3.5 durch PEP 488 (September 2015) als veraltet markiert und wird von keiner aktuellen Python-Version mehr generiert. Ab Python 3.5 wird optimierter Bytecode innerhalb von __pycache__ mit Namen wie module.cpython-311.opt-1.pyc (für -O) oder .opt-2.pyc (für -OO) gespeichert. Wenn Sie heute auf eine .pyo-Datei stoßen, stammt diese aus Python 2 oder Python 3.0-3.4 Code.
.pyo-Dateien sind nicht zwischen CPython-Versionen portierbar - die Magic Number ändert sich mit jedem Release. Werkzeuge wie uncompyle6 (Python 2-3.8) und decompyle3 (Python 3.7-3.11) können .pyo-Dateien in annähernden .py-Quellcode dekompilieren, wobei die Genauigkeit je nach Python-Version und Code-Komplexität variiert.
Sicherheit
RISIKO: MEDIUMEine .pyo-Datei wird als Python-Bytecode mit allen Funktionen eines Python-Skripts ausgeführt - Dateisystemzugriff, Netzwerk, Ausführung von Subprozessen. Führen Sie niemals eine .pyo-Datei aus einer nicht vertrauenswürdigen Quelle aus. Antivirensoftware scannt .pyo-Inhalte oft nicht. Bösartige Python-Apps werden manchmal nur als Bytecode (.pyc/.pyo) verteilt, um Reverse Engineering zu erschweren, obwohl Dekompiler den Quellcode weitgehend wiederherstellen können.
Formatdetails
kurz gefasstProgramme zum Öffnen von PYO-Dateien
Technische Details
technische Spezifikation| Format-Beziehung | Byte für Byte identisches Dateiformat wie `.pyc`; unterscheidet sich nur durch die Dateiendung und den Optimierungsinhalt |
| Header-Struktur | 16-Byte-Header: 4-Byte Versions-Magic + 4-Byte Flags + 4-Byte Quell-mtime oder Hash + 4-Byte Quellgröße |
| Body-Format | Gemarshalltes CPython-Code-Objekt (Bytecode-Anweisungen, Konstanten-Pool, Namen, Variablennamen, verschachtelte Code-Objekte) |
| Byte-Reihenfolge | Little-endian (CPython marshal Serialisierungsformat) |
| Optimierungsstufe -O | Entfernt `assert`-Anweisungen aus dem kompilierten Bytecode |
| Optimierungsstufe -OO | Entfernt `assert`-Anweisungen und alle Docstrings aus dem kompilierten Bytecode |
| Veraltung | Dateiendung `.pyo` in Python 3.5 abgeschafft (PEP 488, September 2015); wird von keinem aktuellen Python-Release mehr generiert |
| Modernes Äquivalent | `module.cpython-3X.opt-1.pyc` (Stufe 1) oder `.opt-2.pyc` (Stufe 2), gespeichert in `__pycache__` |
| Versions-Portabilität | Nicht portierbar zwischen CPython-Versionen; die Magic Number in den Bytes 0-3 ändert sich mit jedem Hauptrelease von CPython |
| Integritätsprüfung | Python 3.7+ (PEP 552): optionaler SipHash der Quelle in den Header-Flags gespeichert; Python 2 / frühes 3: nur mtime-Vergleich |
| Dekompilierungswerkzeuge | `uncompyle6` (Python 2-3.8), `decompyle3` (Python 3.7-3.11) |
| Legacy-Umfang | Nur von Python 2 oder Python 3.0-3.4 produziert; kommt in Projekten für Python 3.5 oder neuer nicht vor |
| Veröffentlicht | Early CPython (1990s); same as .pyc but with optimizations (assert removal with -O; docstring removal with -OO) |
| Neueste Version | DEPRECATED in Python 3.5 (PEP 488, September 2015) - .pyo extension no longer generated; replaced by .cpython-3X.opt-1.pyc / .opt-2.pyc naming |
| Offener Standard | Ja · lizenzgebührenfrei |
| Spezifikation | peps.python.org |
PYO-Konvertierungen
Community Q&A
von Nutzern gefragtNoch keine Fragen - stellen Sie die erste Frage zu PYO-Dateien.