歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Python的編譯後文件介紹

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 的下載地址:請點這裡

Copyright © Linux教程網 All Rights Reserved