Převod souboru PYC do PY
Obnovte čitelný zdrojový kód Pythonu z bytecode pomocí decompilers odpovídajících verzi.
Vytvořte soubory PY online
Soubory PYC zatím číst neumíme, takže tenhle převod nenabízíme. Pokud dokážete svou práci uložit do některého z těchto formátů, PY z něj vyrobíme:
Chcete převádět PYC na PY?
Dejte nám vědět. Podle zájmu vybíráme, které převody přidáme jako další.
Jak převést soubor pyc do formátu py
- Programování
- Dosud nehodnoceno.
Soubor PY je potřeba, když program, developer nebo archiv obsahuje pouze zkompilovaný Python modul, ale jeho zdrojový kód je nutné prozkoumat nebo upravit. Jedná se o dekompilaci, nikoli o bezeztrátovou konverzi formátu, takže obnovený kód se nemusí shodovat s původním.
Co je formát PYC
Soubory PYC obsahují Python bytecode a serializovaný code object určený ke spuštění Python interpreterem. Python je běžně vytváří při importování nebo kompilaci souboru PY a ukládá je do __pycache__ s názvy jako module.cpython-311.pyc. Nainstalované packages, application deployments a bundled software mohou obsahovat soubory PYC bez odpovídajícího zdrojového kódu.
Soubor PYC má header obsahující metadata interpreteru a cache, po kterém následují marshaled bytecode data. Obvykle nezachovává comments, původní whitespace, quoting, formatting ani přesné uspořádání zdrojového kódu. Mnoho identifiers zůstává v code objectu, ale optimalizace, obfuscation, generovaný kód a detaily kompilace mohou některé informace odstranit nebo změnit.
Co je formát PY
PY je plain-text Python source file určený ke čtení a úpravám. Python interpreters, IDEs, linters, formatters, version-control systems a packaging tools pracují přímo se soubory PY. Na rozdíl od rekonstruovaného výstupu zachovává původní soubor PY developerovy comments, formatting, organizaci zdrojového kódu a obvykle i veškerý source-level intent.
Přejmenování souboru PYC na .py jej nepřevede: výsledkem je stále binary bytecode, který není validním Python source.
Jak dekompilovat soubor PYC
- Vytvořte kopii souboru PYC a pracujte s touto kopií. Nespouštějte nedůvěryhodný PYC ani rekonstruovaný script; decompilers a Python imports by se při práci s nedůvěryhodným souborem měly spouštět v izolovaném prostředí.
- Určete Python version, která soubor vytvořila. Název jako
module.cpython-311.pycoznačuje CPython 3.11, ale samostatný filename tuto informaci obsahovat nemusí. Další vodítka může poskytnout producing package, PYC header nebo bytecode magic number. - Nainstalujte decompiler, jehož zdokumentovaná podpora zahrnuje danou bytecode version. Například:
python -m pip install decompyle3
decompyle3 -o recovered path/to/module.pyc
Výstupní directory by měl obsahovat rekonstruované source files. Pokud nainstalovaný command není dostupný v system path, spusťte executable z script directory daného environment.
Pro jinou podporovanou version vyzkoušejte uncompyle6:
python -m pip install uncompyle6
uncompyle6 -o recovered path/to/module.pyc
decompyle3 a uncompyle6 podporují konkrétní rozsahy Python bytecode, nikoli každé aktuální release, proto si před volbou mezi nimi projděte compatibility documentation jednotlivých projektů. pycdc je další local option, pokud jeho release podporuje bytecode version daného souboru:
pycdc path/to/module.pyc > recovered.py
Online services, jako je PyLingual, mohou být užitečné pro nedůvěrné soubory, pokud jejich zveřejněná podpora zahrnuje Python version daného PYC. Nahrání bytecode odešle potenciálně proprietary code třetí straně a může podléhat limitům velikosti, uchovávání nebo zpracování; u důvěrného software použijte local tool a před otevřením nebo spuštěním stažený output ověřte.
Kontrola a oprava obnoveného zdrojového kódu
Otevřete vygenerovaný soubor .py v editoru a zkontrolujte syntax, imports, exception handling, generators, comprehensions, decorators, closures a dynamically generated code. Zkompilujte jej pomocí zamýšleného interpreteru:
python -m py_compile recovered.py
Úspěšná kompilace kontroluje pouze syntax. Před použitím výsledku jako replacement source spusťte relevantní tests a porovnejte chování s původní application. Decompiler může vytvořit code, který vypadá validně, ale obsahuje nesprávný control flow nebo postrádá některé detaily.
Kompatibilita a limity obnovení
Bytecode je úzce svázán s Python implementations a releases. PYC vytvořený Pythonem 3.11 nebo 3.12 nemusí fungovat s decompilerem, který podporuje pouze starší bytecode; soubory PYC z Pythonu 2 obecně vyžadují tooling kompatibilní s Pythonem 2. Poškozený, zkrácený, optimalizovaný, obfuscated nebo upravený soubor může vytvořit neúplný output nebo selhat úplně.
Dekompilace nedokáže obnovit comments, původní formatting, nedostupné external modules, package data ani source files, na které code odkazuje. Native extension modules nejsou Python PYC files a vyžadují jiné recovery methods. Původní soubor PY, version-control repository, deployment archive, backup nebo package source představuje jediný spolehlivý způsob, jak získat přesný zdrojový kód.
PYC vs PY: srovnání formátů
Jak si formáty PYC a PY stojí v nejdůležitějších vlastnostech pro tento převod.
| Vlastnost | .PYC Python compiled 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 | Ano | Ano |
| Nejvhodnější pro | Vkládání do aplikací | Úpravy a postprodukce |
| Zavedeno | 1991 | 1991 |
| Vývojář | Python Software Foundation | Python Software Foundation |
| MIME typ | — | text/x-python |
Informace o příponách a typech souborů poskytuje File-Extensions.org
Navrhovaný software pro převod pyc do py
Často kladené otázky
Lze soubor .pyc převést zpět na soubor .py?
Soubor .pyc lze někdy dekompilovat do přibližného zdrojového kódu .py, ale obvykle jej nelze obnovit přesně. Původní komentáře, formátování a některé podrobnosti na úrovni zdrojového kódu se při kompilaci běžně ztratí.
Bude obnovený kód .py totožný s původním?
Ne, obnovený kód .py je obvykle rekonstrukcí zkompilovaného bytecode, nikoli původním zdrojovým kódem. Názvy a struktura programu mohou být částečně zachovány, ale komentáře, mezery, některé výrazy a další podrobnosti zdrojového kódu mohou být odlišné nebo chybět.
Proč se převod .pyc na .py u některých souborů Pythonu nezdaří?
Často selže, když verze bytecode neodpovídá dekompilátoru nebo když byl soubor optimalizován, obfuskován, poškozen či vytvořen jinou implementací Pythonu. Soubor .pyc také může obsahovat pouze zkompilovaný kód modulu, takže z něj nelze obnovit zdrojové soubory ani strukturu projektu, které v něm nikdy nebyly zahrnuty.
Mohu výsledný soubor .py spustit přesně jako původní?
Často ano, ale ne vždy; obnovený kód může před spuštěním vyžadovat ruční opravy. Bytecode specifický pro danou verzi Pythonu, chybějící externí soubory a ztracené podrobnosti na úrovni zdrojového kódu mohou způsobit syntaktické chyby nebo změnu chování.