Чи можна декомпілювати компільований .pyc файл у .py файл?


Відповіді:


169

Uncompyle6 працює для Python 3.x та 2.7 - рекомендований варіант, як найновіший інструмент, спрямований на уніфікацію попередніх вилок і фокусування на автоматизованому тестуванні одиниць. На сторінці GitHub є детальніше.

  • якщо ви використовуєте Python 3.7+, ви також можете спробувати decompile3 , вилку Uncompyle6 з фокусом на 3,7 і вище.
  • при необхідності піднімають проблеми GitHub щодо цих проектів - обидва запускають тестові набори модулів для ряду версій Python

Старіший Uncompyle2 підтримує лише Python 2.7. Для мене це спрацювало деякий час тому, щоб декомпілювати байтовий код .pyc в .py, тоді як unpyclib вийшов з ладу за винятком.

За допомогою всіх цих інструментів ви отримуєте свій код назад, включаючи назви змінних, але без коментарів.


7
Дуже дякую. Я випадково видалив свій .py файл замість .pyc. Це врятувало мене від необхідності переписати його з нуля.
авмохан

21
Для тих, хто ви тут, оскільки ви випадково видалили неправильний файл, настійно рекомендую керувати джерелами!
Ендрю Палмер

30

Так, ви можете отримати це, unpyclibщо можна знайти на піпі .

$ pip install unpyclib

Чим ви можете декомпілювати файл .pyc

$ python -m unpyclib.application -Dq path/to/file.pyc

20
Я спробував це, і він вийшов з винятку, на зовсім невеликому файлі без складного коду (Django settings.py) - натомість Unpyle2 добре працював. -1 з цієї причини.
RichVel

9
Він зазнав аварії в Python 3.6 в lib \ site-пакети \ unpyclib \ applcation.py з print __copyright- чому він використовує версію Python 2.7 printбез дужок?
Девід Чін

1
unpyclibПерший і останній випуск @DavidChing був у 2009 році , можна сказати, що це лише програма Python 2.
Борис

28

Ви можете спробувати Easy Python Decompiler . Він заснований на Decompyle ++ та Uncompyle2. Він підтримує декомпіляцію версій python 1.0-3.3

Примітка. Я є автором вищезазначеного інструменту.


5
Це робить свою справу. Гарна робота. До речі, ти написав цей інструмент у python?
shinzou

1
Для мене добре працювали (легке перетягування). Це правда, що дистрибутив Linux був би непоганим, але це не все, що важко відкрити вікно.
Брайан Джексон

Останній реліз у 2015 році і схоже, що це закрите джерело?
Борис


4

Так .

Я використовую decompyle6 decompile (навіть підтримую найновіший Python 3.8.0):

uncompyle6 utils.cpython-38.pyc > utils.py

і порівняння початкового пітона та декомпільованого пітона виглядають так:

Pyc unpile утиліти

так що ви можете бачити, ТОЛЬКО той же, ефект декомпіляції ДУЖЕ ДОБРО .


3

Так, можливо.

Є ідеальний декомпілятор з відкритим кодом Python (.PYC), який називається Decompyle ++ https://github.com/zrax/pycdc/

Decompyle ++ має на меті перетворити скомпільований байт-код Python назад у дійсний та читаний людиною вихідний код Python. Хоча інші проекти досягли цього з різноманітним успіхом, Decompyle ++ унікальна тим, що прагне підтримати байт-код з будь-якої версії Python.


2
Хоча pycdc хороший, він не ідеальний. Якщо ви подивитесь на github.com/zrax/pycdc/isissue, у декомпіляції є понад 50 окремих проблем, які виникають у неї. Однак це поширюється на 16 або більше випусків python, і мова, і код різко змінилися. Можливо, у тому, що ви спробували, ви не змогли знайти проблему. Однак, на мій погляд, щоб класифікувати щось як «ідеальне», потрібно було б сказати всю бібліотеку Python для кожної версії, декомпілювати її та дозволити їй правильно пройти власні тести. Жоден декомпілятор ще не може цього зробити.
скелястий

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.