1. 程式人生 > 實用技巧 >python如何不生成pyc檔案(三種方式)

python如何不生成pyc檔案(三種方式)

· 前言

用python編寫好一個工程,在第一次執行後,總會發現工程根目錄下生成了一個__pycache__資料夾,裡面是和py檔案同名的各種*.pyc 或者 *.pyo檔案。

先大概瞭解一下python基本執行機制。Python程式執行時不需要編譯成二進位制程式碼,而直接從原始碼執行程式,簡單來說是,Python直譯器將原始碼轉換為位元組碼,然後再由直譯器來執行這些位元組碼。

直譯器的具體工作:

1 完成模組的載入和連結;

2 將原始碼編譯為PyCodeObject物件(即位元組碼),寫入記憶體中,供CPU讀取;

3 從記憶體中讀取並執行,結束後將PyCodeObject寫回硬碟當中,也就是複製到.pyc或.pyo檔案中,以儲存當前目錄下所有指令碼的位元組碼檔案;

* 之後若再次執行該指令碼,它先檢查【本地是否有上述位元組碼檔案】和【該位元組碼檔案的修改時間是否與其指令碼一致】。是就直接執行,否則重複上述步驟。

以下參考自stackoverflow上的一個回答。

pyc檔案的生成是什麼情況下生成呢:

python直譯器會將*.py指令碼檔案進行編譯,並將編譯結果儲存到__pycache__目錄中。

下次再執行工程時,若直譯器發現這個*.py指令碼沒有修改過,就會跳過編譯這一步,直接執行以前生成的儲存在__pycache__資料夾裡的*.pyc檔案。

這樣工程較大時就可以大大縮短專案執行前的準備時間;如果你只需執行一個小工程,沒關係 忽略這個資料夾就行。

· 什麼時候會出現__pycache__資料夾?

工程目錄下有__main__.py檔案,和其他將要呼叫的模組時。如果只有當前執行的指令碼 "__main__",則不會生成__pycache__的檔案。


當 import匯入另一個模組的時候會生成
python3會生成__pycache__
如何不生成編譯檔案呢:
1.執行的時候 使用 -B引數 即

python3 -B test.py

裡面的包含的就不會生成pyc了

2.設定環境變數

export PYTHONDONTWRITEBYTECODE=1

還有一種更方便的
3. 在引入的地方寫

import sys
sys.dont_write_bytecode 
= True

以上三種方式都可以實現不生成pyc檔案。

附:該資料夾出現在Python3.2及其後的版本中,Python2下的編譯檔案和原始檔放同目錄。

參考:https://blog.csdn.net/qq_28295425/article/details/82966343