1.簡介
相對於py文件來說,編譯成pyc和pyo本質上和py沒有太大區別,只是對於這個模塊的加載速度提高了,並沒有提高代碼的執行速度,通常情況下不用主動去編譯pyc文件,除非需要商業提供,防止源代碼洩露。
(1)什麼是pyc文件
pyc是一種二進制文件,是由py文件經過編譯後,生成的文件,是一種byte code,py文件變成pyc文件後,加載的速度有所提高,而且pyc是一種跨平台的字節碼,是由python的虛擬機來執行的,這個是類似於JAVA虛擬機的概念。pyc的內容,是跟python的版本相關的,不同版本編譯後的pyc文件是不同的,2.5編譯的pyc文件,2.4版本的 python是無法執行的。
(2)什麼是pyo文件
pyo是優化編譯後的程序 python -O 源文件即可將源程序編譯為pyo文件
把需要的模塊編譯成pyo文件可以減少容量
2.反編譯
將python文件編譯為pyc文件(使用compileall 命令),再刪除源代碼。
(該文件類似於java中的class文件,但是我們使用的2.7版本的python,目前沒有
免費版的反編譯工具,所以目前要破解不是很容易,所以可以不必再做混淆)
(1)命令行編譯方法:
python -m compileall src/
echo compile finished...
rm -rf src/*.py
編譯成pyo的話:
就是在控制台執行 python -O -m py_compile file.py
(2)python程序編譯方法:
如果需要特殊的單獨編譯,則只需要使用py_complie這個模塊就行了,如下
import py_compile
py_compile.compile(r'H:\game\test.py')
反編譯工具:
1.uncompyle2 只能編譯2.7
https://github.com/wibiti/uncompyle2
反編譯Demo代碼:
import os
import sys
def displayFile(file):
unPath= sys.executable
unPath=unPath[ 0 : unPath.rfind( os.sep ) ]
newname = file[0:file.rfind('.')] + '.py'
command = "python -u "+unPath+"\scripts\uncompyle2 " + file + ">" + newname
try:
os.system(command)
except e:
print file
if __name__ == '__main__':
#print unPath
print 'init'
displayFile('E:\\test.pyc')
print 'finished'
2.zrax/pycdc 可以編譯3.0
https://github.com/zrax/pycdc
Python 的詳細介紹:請點這裡
Python 的下載地址:請點這裡