2011-11-18 102 views
37

我已經上下搜索,但是找不到可用於Python 2.7 .pyc的反編譯器。有人知道一個可以用於Python 2.7的工具嗎?謝謝反編譯Python 2.7 .pyc

回答

13

這聽起來像它的工作原理:http://code.google.com/p/unpyc/

第8表示支持2.7:http://code.google.com/p/unpyc/updates/list

更新(2013年9月3日) - 作爲評價和在其他的答案提到的,你應該看看https://github.com/wibiti/uncompyle2https://github.com/gstarnberger/uncompyle而不是unpyc。

+1

即使在問題8應用補丁後,我不能得到這個工作與Python 2.7。 –

+1

在Python 2.7上出現異常崩潰 - 使用Uncompyle2 – RichVel

+0

我投了反應,因爲它不適用於python 2.7 –

3

Ned Batchelder發佈了一個short script,它將解組一個.pyc文件並反彙編其中的任何代碼對象,以便您能夠看到Python字節碼。 它看起來像使用較新版本的Python,您需要註釋掉設置爲modtime並打印它的行(但不要註釋設置爲moddate的行)。

雖然理論上可行,但將其重新轉換爲Python源代碼會稍微困難一些。我認爲所有這些程序都適用於老版本的Python。

83

如果有些人還在爲此苦苦掙扎,因爲我今天所有的早上,我發現我工作的解決方案:

Uncompyle

安裝說明:

git clone https://github.com/gstarnberger/uncompyle.git 
cd uncompyle/ 
sudo ./setup.py install 

一旦該程序將被安裝(注意:它將被安裝到您的系統範圍內的Python包中,因此它應該在您的$PATH中),您可以像這樣恢復您的Python文件:

uncompyler.py thank_goodness_this_still_exists.pyc > recovered_file.py 

反編譯器主要以評論的形式增加了一些噪音,但是我發現它對我的原始代碼來說是非常乾淨和忠實的。您必須在恢復的文件末尾附近刪除以+++開頭的一行文本才能運行您的代碼。

+5

保存我的培根!從現在開始,我將把它添加到我的virtualenvs中...... – kaleissin

+5

也保存了我的培根。我是一個天才,運行rm * .py來清理我的pyc文件,然後再提交git。但至少它讓我的.pyc文件帶有一點諷刺意味。 – Eloff

+2

@Eloff包含* .pyc的.gitignore文件比在每次提交前刪除* .pyc要容易得多!可能是因爲許多程序員傾向於這樣做,並且對於擁有一個乾淨的環境稍微有些迷戀:D – Milosz

26

Decompyle ++(pycdc)似乎對一系列Python版本的工作:https://github.com/zrax/pycdc

例如:

git clone https://github.com/zrax/pycdc 
cd pycdc 
make 
./bin/pycdc Example.pyc > Example.py 
+4

真正的拯救者,只有一個爲我工作。 –

+2

你必須運行'cmake'。在你運行make之前 –

+0

這個反編譯器的在線版本可以在這裏找到http://www.javadecompilers.com/pyc。無需安裝。 –

11

這裏是一個反編譯的pyc文件的便利工具。

它是由我編碼,並支持Python 1.0 - 3.3

其基於uncompyle2和decompyle ++

http://sourceforge.net/projects/easypythondecompiler/

+4

甜!值得一提的是,這是Windows用戶的:) – tutuDajuju

+1

源代碼在SourceForge上不可用,所以我現在將忽略此工具。 – Bludzee

+0

非常方便的工具!反編譯我的Python 2.7文件,在Linux Mint的wine下沒有任何問題 – sly