用python編寫好一個工程,在第一次運行後,總會發現工程根目錄下生成了一個__pycache__文件夾,裏面是和py文件同名的各類 *.pyc 或者 *.pyo 文件。python
先大概瞭解一下python基本運行機制。Python程序運行時不須要編譯成二進制代碼,而直接從源碼運行程序,簡單來講是,Python解釋器將源碼轉換爲字節碼,而後再由解釋器來執行這些字節碼。spa
解釋器的具體工做:code
1 完成模塊的加載和連接;orm
2 將源代碼編譯爲PyCodeObject對象(即字節碼),寫入內存中,供CPU讀取;對象
3 從內存中讀取並執行,結束後將PyCodeObject寫回硬盤當中,也就是複製到.pyc或.pyo文件中,以保存當前目錄下全部腳本的字節碼文件;內存
* 以後若再次執行該腳本,它先檢查【本地是否有上述字節碼文件】和【該字節碼文件的修改時間是否與其腳本一致】。是就直接執行,不然重複上述步驟。ci
如下參考自stackoverflow上的一個回答。源碼
python解釋器會將 *.py 腳本文件進行編譯,並將編譯結果保存到__pycache__
目錄中。it
下次再執行工程時,若解釋器發現這個 *.py 腳本沒有修改過,就會跳過編譯這一步,直接運行之前生成的保存在 __pycache__
文件夾裏的 *.pyc 文件。io
這樣工程較大時就能夠大大縮短項目運行前的準備時間;若是你只需執行一個小工程,不要緊 忽略這個文件夾就行。
工程目錄下有__main__.py文件,和其餘將要調用的模塊時。若是隻有當前運行的腳本 "__main__",則不會生成 __pycache__ 的文件。
單次: 運行腳本時添加 -B 參數
python -B foo.py
永久: 設置環境變量 PYTHONDONTWRITEBYTECODE=1
附:該文件夾出如今Python3.2及其後的版本中,Python2下的編譯文件和源文件放同目錄。