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


免責聲明!

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



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