Převod souboru PYO do PY
Obnovte čitelný zdrojový kód Pythonu z optimalizovaného bytecode starší verze Python 2.
Jak převést soubor pyo do formátu py
- Programování
- Dosud nehodnoceno.
Starý software pro Python 2 může poskytovat pouze soubor .pyo, když editor, systém pro kontrolu kódu nebo projekt údržby vyžaduje čitelný zdrojový kód .py. Převod vyžaduje dekompilaci, protože soubor PYO neobsahuje původní zdrojový text.
Co je formát PYO
Soubor PYO je optimalizovaný bytecode Pythonu vytvořený nástrojem Python 2 při spuštění kódu s parametrem -O nebo -OO. Python 2 jej běžně ukládal vedle zdrojového kódu jako module.pyo; Python 3.5 a novější samostatný formát PYO odstranily a optimalizovaný bytecode ukládají jako soubory .pyc s tagy.
Soubory PYO můžete najít v archivovaných aplikacích Pythonu 2, softwaru pro vestavěná zařízení a starých instalačních adresářích obsahujících soubory jako __init__.pyo. PYO je zkompilovaný bytecode pro interpreter Pythonu, nikoli komprimovaná nebo přejmenovaná kopie původního souboru .py.
Co je formát PY
Soubor PY obsahuje zdrojový kód Pythonu v prostém textu, který lze otevřít, upravovat, prohledávat, verzovat a spouštět pomocí kompatibilního interpreteru. Jde o formát očekávaný editory zdrojového kódu, repozitáři kódu, nástroji pro linting a většinou vývojových nástrojů.
Dekompilace může znovu vytvořit kód Pythonu vypadající jako spustitelný, ale obvykle nedokáže obnovit komentáře, původní mezery, komentáře s kódováním zdrojového kódu, přesné formátování ani konstrukce zdrojového kódu odstraněné během kompilace. Mnoho názvů zůstává v bytecode, ale není zaručeno, že odpovídají názvům zamýšleným autorem.
Jak převést PYO na PY
- Určete verzi bytecode. Přípona
.pyoobvykle označuje Python 2, ale bytecode Pythonu 2.5, 2.6 a 2.7 se liší. Verzi určete z hlavičky souboru pomocí okolní aplikace, její dokumentace nebo nástroje pro kontrolu bytecode. Dekompilátor musí tuto verzi podporovat. - Zachovejte originál. Pracujte s kopií a nespouštějte nedůvěryhodný soubor PYO. Pokud soubor obsahuje proprietární kód, bez oprávnění jej nenahrávejte do služby třetí strany.
- Nainstalujte lokální dekompilátor.
uncompyle6je běžně používaná open-source možnost pro bytecode Pythonu; nainstalujte jej v izolovaném prostředí pomocípython -m pip install uncompyle6. Další lokální možností jepycdcsestavený z jeho oficiálního repozitáře. Před výběrem si ověřte podporované verze bytecode v jednotlivých projektech. - Spusťte dekompilátor. Například
uncompyle6 -o recovered module.pyozapíše obnovené soubory do adresářerecovered. Některá vydání nebo wrappery mohou příponu.pyoodmítnout, přestože soubor obsahuje standardní bytecode Pythonu 2. V takovém případě jej zkopírujte domodule.pyca akci zopakujte; přejmenování změní pouze název souboru, nikoli bytecode. - V případě potřeby zachyťte standardní výstup. Pokud nástroj vypisuje zdrojový kód místo vytvoření souboru, použijte
uncompyle6 module.pyo > module.py. Výsledek zkontrolujte, než nahradíte jakýkoli existující zdrojový kód. - Ověřte výsledek pomocí odpovídajícího interpreteru. Nejprve zkontrolujte výstup Pythonu 2 pomocí vhodného interpreteru Pythonu 2, například
python2 recovered/module.py, v kontrolovaném prostředí. Chyby dekompilátoru opravte ručně a poté kód podle potřeby převeďte do Pythonu 3 pomocí nástrojů, jako je2to3; automatický převod nenahrazuje testování.
Žádné běžné přejmenování, rozbalení archivu ani export textu nepřevede PYO na zdrojový kód. Důvěryhodné online konvertory obecně nejsou pro tento formát praktickým doporučením: podpora závisí na přesné verzi bytecode Pythonu a nahráním proprietárního softwaru vystavujete jeho kód. Lokální dekompilátor je bezpečnější a obvykle spolehlivější.
Omezení kvality a kompatibility
Dekompilace je aproximace. Komentáře, formátování, syntaxe používaná pouze ve zdrojovém kódu a část původní struktury se ztratí. Kompilace Pythonu 2 s parametrem -O odstraňuje příkazy assertion; -OO odstraňuje také docstringy. Obnovený soubor se proto může lišit v chování nebo dokumentaci, i když se spustí.
Zkontrolujte odsazení, zpracování výjimek, generátory, dekorátory, kódování řetězců, importy a řídicí tok. Dekompilátor může vytvářet syntaktické chyby nebo nenápadně nesprávný kód, pokud plně nepodporuje danou verzi bytecode nebo konkrétní konstrukci kompilátoru.
Soubor PYO může také záviset na modulech balíčků, datových souborech, nativních rozšířeních, proměnných prostředí a konkrétním pracovním adresáři. Úspěšný převod vytvoří zdrojový text, nikoli samostatnou náhradní aplikaci.
PYO vs PY: srovnání formátů
Jak si formáty PYO a PY stojí v nejdůležitějších vlastnostech pro tento převod.
| Vlastnost | .PYO Python Optimized Bytecode | .PY Python source file |
|---|---|---|
| Čitelný jako prostý text | Ne | Ano |
| Formátování textu | Žádné | Základní |
| Obrázky | Ne | Ne |
| Další úpravy | Nelze přímo upravovat | Snadné |
| Otevírá se ve webovém prohlížeči | Ne | Ne |
| Typická velikost souboru | Velmi malé | Malé |
| Otevřený standard | Ne | Ano |
| Nejvhodnější pro | Vkládání do aplikací | Úpravy a postprodukce |
| Zavedeno | — | 1991 |
| Vývojář | Python Software Foundation | Python Software Foundation |
| MIME typ | — | text/x-python |
Databáze v současné době neobsahuje žádný program na konverzi souborů pyo.