python文件编译_编译Python文件
編譯Python文件
一、編譯Python文件
為了提高加載模塊的速度,強(qiáng)調(diào)強(qiáng)調(diào)強(qiáng)調(diào):提高的是加載速度而絕非運行速度。python解釋器會在__pycache__目錄中下緩存每個模塊編譯后的版本,格式為:module.version.pyc。通常會包含python的版本號。例如,在CPython3.3版本下,spam.py模塊會被緩存成__pycache__/spam.cpython-33.pyc。這種命名規(guī)范保證了編譯后的結(jié)果多版本共存。
Python檢查源文件的修改時間與編譯的版本進(jìn)行對比,如果過期就需要重新編譯。這是完全自動的過程。并且編譯的模塊是平臺獨立的,所以相同的庫可以在不同的架構(gòu)的系統(tǒng)之間共享,即pyc使一種跨平臺的字節(jié)碼,類似于JAVA, .NET,是由python虛擬機(jī)來執(zhí)行的,但是pyc的內(nèi)容跟python的版本相關(guān),不同的版本編譯后的pyc文件不同,2.5編譯的pyc文件不能到3.5上執(zhí)行,并且pyc文件是可以反編譯的,因而它的出現(xiàn)僅僅是用來提升模塊的加載速度的,不是用來加密的。
# python解釋器在以下兩種情況下不檢測緩存
1. 如果是在命令行中被直接導(dǎo)入模塊,則按照這種方式,每次導(dǎo)入都會重新編譯,并且不會存儲編譯后的結(jié)果(python3.3以前的版本應(yīng)該是這樣)
python -m spam.py
2. 如果源文件不存在,那么緩存的結(jié)果也不會被使用,如果想在沒有源文件的情況下來使用編譯后的結(jié)果,則編譯后的結(jié)果必須在源目錄下
sh-3.2 # ls
__pycache__ spam.py
sh-3.2 # rm -rf spam.py
sh-3.2 # mv __pycache__/spam.cpython-36.pyc ./spam.pyc
sh-3.2 # python3 spam.pyc
spam
# 提示:
1. 模塊名區(qū)分大小寫,foo.py與FOO.py代表的是兩個模塊
2. 你可以使用-O或者-OO轉(zhuǎn)換python命令來減少編譯模塊的大小
-O轉(zhuǎn)換會幫你去掉assert語句
-OO轉(zhuǎn)換會幫你去掉assert語句和__doc__文檔字符串
由于一些程序可能依賴于assert語句或文檔字符串,你應(yīng)該在在確認(rèn)需要
的情況下使用這些選項。
3. 在速度上從.pyc文件中讀指令來執(zhí)行不會比從.py文件中讀指令執(zhí)行更快,只有在模塊被加載時,.pyc文件才是更快的
4. 只有使用import語句是才將文件自動編譯為.pyc文件,在命令行或標(biāo)準(zhǔn)輸入中指定運行腳本則不會生成這類文件,因而我們可以使用compieall模塊為一個目錄中的所有模塊創(chuàng)建.pyc文件
模塊可以作為一個腳本(使用python -m compileall)編譯Python源
python -m compileall /module_directory 遞歸著編譯
如果使用python -O -m compileall /module_directory -l則只一層
命令行里使用compile()函數(shù)時,自動使用python -O -m compileall
詳見:https://docs.python.org/3/library/compileall.html#module-compileall
二、批量生成.pyc文件
import compileall
compileall.compile_dir('$dir')
其中,$dir 為Python源代碼所在的目錄。
三、總結(jié)
編譯Python文件:編譯文件提高的是加載速度而絕非運行速度
總結(jié)
以上是生活随笔為你收集整理的python文件编译_编译Python文件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python3 set_python3.
- 下一篇: python qq模块_常用的Pytho