컴파일 된 .pyc 파일을 .py 파일로 디 컴파일 할 수 있습니까?


답변:


169

Uncompyle6 은 Python 3.x 및 2.7에서 작동합니다. 가장 오래된 도구이므로 권장되는 옵션으로, 이전 포크를 통합하고 자동화 된 단위 테스트에 중점을 둡니다. GitHub의 페이지에 자세한 내용이 있습니다.

  • Python 3.7 이상을 사용하는 경우 Uncompyle6 포크 인 3.7 이상에서 decompile3 을 시도 할 수도 있습니다 .
  • 필요한 경우 이러한 프로젝트에서 GitHub 문제를 제기하십시오. 두 가지 버전의 Python 버전에서 모두 단위 테스트 스위트를 실행하십시오.

오래된 Uncompyle2 는 Python 2.7 만 지원합니다. 이것은 언젠가는 .pyc 바이트 코드를 .py로 디 컴파일하기 위해 잘 작동했지만 unpyclib는 예외로 충돌했습니다.

이러한 모든 도구를 사용하면 변수 이름을 포함하지만 주석은 포함하지 않고 코드를 다시 얻을 수 있습니다.


7
고마워 실수로 .pyc 대신 내 .py 파일을 삭제했습니다. 이로 인해 처음부터 다시 작성하지 않아도되었습니다.
avmohan

21
실수로 잘못된 파일을 삭제했기 때문에 여기에있는 사람들에게는 소스 제어를 적극 권장합니다!
Andrew Palmer

30

예, pypiunpyclib 에서 찾을 수 있습니다 .

$ pip install unpyclib

.pyc 파일을 디 컴파일 할 수있는 것보다

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

20
나는 이것을 시도했지만 복잡한 코드가없는 아주 작은 파일 (Django settings.py)에서 예외와 충돌했습니다. uncompyle2가 대신 제대로 작동했습니다. 그런 이유로 -1입니다.
RichVel

9
lib \ site-packages \ unpyclib \ applcation.py에서 Python 3.6에서 충돌이 발생했습니다 print __copyright-왜 print괄호없이 Python 2.7 버전을 사용 합니까?
David Ching

1
@DavidChing unpyclib의 첫 번째이자 마지막 릴리스 는 2009 년 에 파이썬 2 전용 프로그램이라고해도 안전합니다.
Boris

28

Easy Python Decompiler를 사용해보십시오 . Decompyle ++ 및 Uncompyle2를 기반으로합니다. 파이썬 버전 1.0-3.3 디 컴파일을 지원합니다.

참고 : 위 도구의 저자입니다.


5
그것은 일을한다. 잘 했어. BTW,이 도구를 파이썬으로 작성 했습니까?
shinzou

1
나를 위해 잘 작동했습니다 (쉬운 드래그 앤 드롭). 리눅스 배포판은 좋을 것이지만, 윈도우 박스를 여는 것이 전부는 아닙니다.
Brian Jackson

2015 년의 마지막 릴리스로 비공개 소스 인 것 같습니다.
Boris


4

.

uncompyle6 디 컴파일을 사용합니다 (최신 Python 3.8.0도 지원).

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

그리고 원점 파이썬과 디 컴파일 된 파이썬 비교는 다음과 같습니다 :

pyc uncompile 유틸리티

당신이 볼 수 있도록, 거의 다 같은, 디 컴파일 효과는 아주 좋은 .


3

네 가능합니다.

Decompyle ++ https://github.com/zrax/pycdc/ 라는 완벽한 오픈 소스 Python (.PYC) 디 컴파일러가 있습니다.

Decompyle ++은 컴파일 된 Python 바이트 코드를 유효하고 사람이 읽을 수있는 Python 소스 코드로 다시 변환하는 것을 목표로합니다. 다른 프로젝트는 다양한 성공으로 이것을 달성했지만 Decompyle ++은 모든 버전의 Python에서 바이트 코드를 지원한다는 점에서 독특합니다.


2
pycdc는 좋지만 완벽하지는 않습니다. github.com/zrax/pycdc/issues 를 보면 디 컴파일에있어 50 가지가 넘는 개별 유형의 문제가 있습니다. 그러나 이것은 16 개 이상의 파이썬 릴리스에 퍼져 있으며 언어와 코드가 크게 변경되었습니다. 시도한 것들에 대해 문제를 찾지 못했을 수도 있습니다. 그러나 제 생각에는 무언가를 "완벽한"것으로 분류하려면 각 버전마다 전체 Python 라이브러리를 말하고 디 컴파일하고 자체 테스트를 올바르게 통과해야합니다. 디 컴파일러는 아직 그렇게 할 수 없습니다.
rocky

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.