Зачем конвертировать PYC в PY?
Основная причина - восстановление исходного кода, когда оригинальный .py был удален или не был предоставлен вместе с байт-кодом. Вторичное использование - аудит программ, распространяемых только в виде байт-кода. Это именно декомпиляция, а не чистая конвертация форматов - .pyc хранит скомпилированный байт-код, и оригинальный текст исходника в нем не сохраняется.
Способы конвертации PYC в PY
decompyle3 FREE
Установите с помощью pip install decompyle3 и запустите decompyle3 yourfile.pyc > recovered.py. Поддерживает Python 3.7-3.8.
uncompyle6 FREE
Установите с помощью pip install uncompyle6 и запустите uncompyle6 yourfile.pyc > recovered.py. Работает с Python версий от 2.x до 3.8.
pycdc OPEN-SOURCE
Скачайте исполняемый файл с github.com/zrax/pycdc и запустите pycdc yourfile.pyc > recovered.py. Лучший вариант для Python 3.9 и новее, хотя точность для 3.11+ ограничена.
Об этих форматах
Файл .pyc - это скомпилированный байт-код Python, который CPython кэширует автоматически для ускорения запуска. Обычно вам не нужно открывать или редактировать его. Чтобы запустить такой…
Открыть детали .PYC →Файл .py - это файл исходного кода Python, представляющий собой обычный текст, содержащий программу или скрипт, написанный на языке Python. Чтобы прочитать код, откройте его в любом…
Открыть детали .PY →Качество и на что обратить внимание
- Комментарии исчезают навсегда - байт-код Python их не хранит; ни один инструмент не сможет восстановить их из
.pycнезависимо от версии Python. - Точность декомпиляции резко падает для Python 3.9 и выше; pycdc - лучший вариант для свежего байт-кода, но он может выдавать неполный результат.
- Если файл
.pycбыл обфусцирован, декомпиляция не удастся или выдаст пустой результат; в качестве запасного варианта можно использоватьpython3 -m dis yourfile.pycдля просмотра отдельных инструкций байт-кода.
Часто задаваемые вопросы
Как узнать, какой версией Python был скомпилирован .pyc?
.pyc в папке __pycache__ именуются как module.cpython-311.pyc - число указывает на версию Python, которая его скомпилировала.Сохраняются ли docstrings при декомпиляции?
Что если декомпилятор выдает ошибки или пустой результат?
.pyc обфусцирован или создан в неподдерживаемой версии Python; попробуйте другой инструмент или используйте python3 -m dis для проверки отдельных инструкций байт-кода.