python程序编译之后、找不到生成的pyc文件_为什么主要的可运行的Python脚本没有被编译为pyc文件,如模块?...
當模塊加載時,py文件被“字節編譯”為pyc文件。時間戳記記錄在pyc文件中。
這樣做不會使其運行速度更快,但加載速度更快。
因此,當您加載它們時,“字節編譯”模塊是有意義的。
[編輯:包括筆記,參考]
From PEP 3147 on “Byte code
compilation”:
CPython將其源代碼編譯成“字節碼”,出于性能考慮,
只要源文件發生更改,它就會將該字節碼緩存在文件系統上。
這使得加載Python模塊的速度更快,因為編譯階段
可以繞過。當您的源文件是foo.py時,CPython緩存該字節
源代碼旁邊的一個foo.pyc文件中的代碼。
How byte code compiled files are
tracked with respect to Python version
and “py” file changes:
它也在編譯的字節碼“.pyc”文件中插入一個魔術數字。
當Python更改字節碼格式時,通常會在主要版本中更改。
這樣可以確保為先前版本的VM構建的pyc文件不會導致問題。
時間戳用于確保pyc文件與之前的py文件相匹配
用來創建它。當魔術數字或時間戳不匹配時,
py文件被重新編譯并寫入一個新的pyc文件。
“pyc”文件在Python主要版本中不兼容。當Python找到一個pyc
文件與不匹配的魔術數字,它回落到較慢的過程
重新編譯源碼。
這就是說,如果你簡單地分配為同一個平臺編譯的“.pyc”文件將不再工作,如果python版本改變了。
In Nutshell
如果有一個字節編譯文件“.pyc”,它的時間戳表示它是最近的,那么它將被加載其他明智的python將回退在較慢的方式加載“.py”文件。 “.py”文件的執行性能不受影響,但“.pyc”文件的加載速度比“.py”文件快。
考慮執行導入b.py的a.py
Typical total performance = loading time (A.py) + execution time (A.py) +
loading time (B.py) + execution time (B.py)
Since loading time (B.pyc) < loading time (B.py)
You should see a better performance by using the byte compiled "pyc" files.
也就是說,如果你有一個很大的腳本文件X.py,將它模塊化并將內容移動到其他模塊,就可以利用字節碼編譯文件的較低的加載時間。
另一個推論是,模塊往往比腳本或主文件更穩定。因此它完全不是字節編譯。
References
總結
以上是生活随笔為你收集整理的python程序编译之后、找不到生成的pyc文件_为什么主要的可运行的Python脚本没有被编译为pyc文件,如模块?...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql is needed by_l
- 下一篇: python读取遥感 dat_基于pyt