天天看點

python的pyc和pyo檔案

python并非完全是解釋性語言,它是有編譯的,先把源碼py檔案編譯成pyc或者pyo,然後由python的虛拟機執行,相對于py檔案來說,編譯成pyc和pyo本質上和py沒有太大差別,隻是對于這個子產品的加載速度提高了,并沒有提高代碼的執行速度,通常情況下不用主動去編譯pyc檔案,文檔上說隻要調用了import model那麼model.py就會先編譯成pyc然後加載

1.如果需要特殊的單獨編譯,則隻需要使用py_complie這個子產品就行了,如下

import py_compile

py_compile.compile(r'H:\game\test.py')

compile函數原型:

compile(file[, cfile[, dfile[, doraise]]])

file 表示需要編譯的py檔案的路徑

cfile 表示編譯後的pyc檔案名稱和路徑,預設為直接在file檔案名後加c 或者 o,o表示優化的位元組碼

dfile 錯誤消息儲存的路徑

doraise 可以是兩個值,True或者False,如果為True,則會引發一個PyCompileError,否則如果編譯檔案出錯,則會有一個錯誤,預設顯示sys.stderr中,而不會引發異常

2.如果要把一個檔案夾下的所有py檔案都進行編譯,則用下面的指令

import compileall

compileall.compile_dir(dirpath)

dirpath是我們要編譯的檔案夾的絕對路徑

3.如果要編譯pyo檔案則

編譯成 pyo 就是在控制台執行 python -O -m py_compile file.py

其中file.py就是我們要編譯的源檔案

個人感覺這個原理知道就行了,其實沒多大用處,僅僅提高了加載速度而已,另外還有一點好處就是可以減少檔案的大小,可能對于嵌入式系統中把需要的子產品都編譯成pyo檔案可減少容量,畢竟嵌入式系統多數都是容量有限,現在的pc硬體越來越強,僅僅提高加載速度沒多大作用,不過這也是python的機理,它就是這麼幹活的,知道就好,呵呵