如何生成pyc/pyo/pyd文件
阿新 • • 發佈:2018-10-03
替換 force 否則 優化 怎麽辦 pil std 排除 none
# 一.如何生成pyc/pyo文件 # 1.通過編寫代碼生成 import py_compile # 參數如下 ‘‘‘ def compile(file, cfile=None, dfile=None, doraise=False, optimize=-1): file:要編譯的源文件 cfile:編譯之後的pyc文件路徑和文件名,默認直接在file後面加上c或者o(會保存在當前目錄的__pycache__文件夾下), pyo相當於優化之後的pyc dfile:把在錯誤信息中顯示的file用dfile替換 doraise:True或False,如果為True,那麽文件編譯出錯的話,則會引發一個PyCompileError。 為False的話,編譯出錯會顯示在sys.stderr中 optimize:用於編譯的優化級別,有效的值為-1,0,1,2。-1表示當前解釋器的優化級別 使用命令行的時候如果設置優化級別,通過-O來設置。用於生成pyo文件了。 說白了後面幾個參數基本上用不到 ‘‘‘ py_compile.compile("your_py_file") # 2.通過命令行生成 # python (-O) -m py_compile your_py_file.py ,加上-O表示優化 ‘‘‘ 有的時候我們不想只編譯一個py文件,而是編譯一個文件夾下的所有py文件怎麽辦呢? python還為我們提供了一個模塊 ‘‘‘ import compileall # 參數如下 ‘‘‘ def compile_dir(dir, maxlevels=10, ddir=None, force=False, rx=None, quiet=0, legacy=False, optimize=-1, workers=1): dir:文件夾路徑 maxlevels:遞歸編譯的的子目錄的層數,默認是把10層子目錄的py文件編譯成pyc ddir:和上面的dfile類似 force:如果為True,將強制編譯為pyc,即便現在pyc文件是最新的,依舊會編譯一次 rx:一個正則表達式,可以排除掉不想編譯的目錄,只編譯想要的目錄 quiet:給我安靜點,編譯之後不會在標準輸出中,打印信息 ‘‘‘ compileall.compile_dir("your_dir") # 同樣可以使用命令行 # python -m compileall your_dir
我們來編譯一個試試
首先我在foo.py中定義了一個函數fuck,然後在bar.py中進行編譯,這裏就不使用命令行了,效果是一樣的。
會發現在當前目錄下的__pycache__目錄中多出了一個文件,正是剛才對編譯的字節碼文件。我們把它移動到當前目錄來,並把foo.py刪除,並把名字改一下,否則無法導入
發現依舊執行成功了,py文件和pyc文件可以按照相同的方式導入
--------------------------------------------------------------------
如何生成pyc/pyo/pyd文件