`__pycache__` 是什么


為了提高模塊加載的速度,每個模塊都會在 __pycache__ 文件夾中放置該模塊的預編譯模塊,命名為 module.version.pyc, version 是模塊的預編譯版本編碼,一般都包含 Python 的版本號。例如在 CPython 發行版 3.4 中,fibo.py 文件的預編譯文件就是:__pycache__/fibo.cpython-34.pyc。這種命名規則可以保證不同版本的模塊和不同版本的 python 編譯器的預編譯模塊可以共存。

腳本在運行之前會首先檢查 python 文件的最后編輯日期和預編譯模塊的編譯時間,從而決定是否需要重新編譯。預編譯模塊也是跨平台的,所以不同的模塊是可以在不同的系統和不同的架構之間共享的。

Python 在兩種情況下不檢查緩存。第一種,從命令行中直接加載的模塊總是會重新編譯並且結果不保存。第二種,如果沒有源模塊,則不會檢查緩存。為了支持無源代碼的部署方式,應該將預編譯模塊放在源代碼文件夾中而不是 __pycache__ 中,並且不要包含源代碼模塊。

你可以使用 -O-OO 參數來降低預編譯模塊的大小。-O 開關會去除 assert 語句,-OO 開關會去除 assert 語句和 __doc__ 字符串。因為有些模塊要依賴這些語句,因此只有當你確認模塊的內容時才去使用這些開關。優化模塊的后綴名是 .pyo

.pyo.pyc 文件的執行速度不會比 .py 文件快,快的地方在於模塊加載的速度。
compileall 模塊可以用來把某個文件夾的中的所有文件都編譯成為 .pyc 或者 .pyo 文件。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM