python中文編譯文件
① python 「編譯的」 Python 文件的理解是什麼
為了加快載入模塊的速度,Python 會在 __pycache__ 目錄下以 mole.version.pyc 名字緩存每個模塊編譯後的版本,這里的版本編制了編譯後文件的格式。它通常會包含 Python 的版本號。例如,在 CPython 3.3 版中,spam.py 編譯後的版本將緩存為 __pycache__/spam.cpython-33.pyc。這種命名約定允許有不同發布和不同版本的 Python 編譯的模塊同時存在。
Python 會檢查源文件與編譯版的修改日期以確定它是否過期並需要重新編譯。這是完全自動化的過程。同時,編譯後的模塊是跨平台的,所以同一個庫可以在不同架構的系統之間共享。
Python 不檢查在兩個不同環境中的緩存。首先,它會永遠重新編譯而且不會存儲直接從命令行載入的模塊。其次,如果沒有源模塊它不會檢查緩存。若要支持沒有源文件(只有編譯版)的發布,編譯後的模塊必須在源目錄下,並且必須沒有源文件的模塊。
部分高級技巧:
為了減少一個編譯模塊的大小,你可以在 Python 命令行中使用 -O 或者 -OO。-O 參數刪除了斷言語句,-OO 參數刪除了斷言語句和 __doc__ 字元串。
因為某些程序依賴於這些變數的可用性,你應該只在確定無誤的場合使用這一選項。「優化的」 模塊有一個 .pyo 後綴而不是 .pyc 後綴。未來的版本可能會改變優化的效果。
來自 .pyc 文件或 .pyo 文件中的程序不會比來自 .py 文件的運行更快;.pyc 或 .pyo 文件只是在它們載入的時候更快一些。
compileall 模塊可以為指定目錄中的所有模塊創建 .pyc 文件(或者使用 -O 參數創建 .pyo 文件)。
在 PEP 3147 中有很多關這一部分內容的細節,並且包含了一個決策流程。
② 如何編譯生成PYC文件
Python語言編程中如何編譯生成PYC文件?(版本Python V 3.4.1)
(1) compile() 函數
compile() 函數有兩個, 一個是內建函數,另一個是模塊py_compile中的.前者生成一個Compile對象,它只能在代碼中被調用(exec(comp)),不能生成pyc文件。後者必須生成pyc文
件,但不能在交互界面運行它(run 和 exec都不行)。
(2) 生成生成pyc文件
compile(file, cfile=None, dfile=None, doraise=False, optimize=-1)
例子:
compile("test.py")
compile("test.py", "test.pyc")
第一種方法輸出文件在子目錄__pycache__中,而且文件名是test.python-34.pyc,有兩個點,不好!所以一定要用第二種格式輸出文件在當前當前目錄。其它選項都預設就行, -1 表示優化,所以pyo文件也不用去做了。
(3) pyc文件的運行
不能在python的交互界面中運行(run 和 exec都不行)。只能夠在DOS屏幕上運行, 格式為:
python test.pyc [argv]
在程序中調用可以用:
os.system ("python test.pyc ")
(4)內建函數compile()的語法
compile(source, filename, mode[, flags[, dont_inherit]]) -> code
object。
生成一個code對象。
例子:
yuju = "print('hello')"
hc = compile(yuju, "yuju.err", "single")
exec(hc)
輸出:hello
type(hc) --> code
使用時至少要提供3個參數,source是源代碼,它可以是語句、表達式或代碼文件。filename要求一個文件名儲存出錯信息,mode是編譯模式,只能使用如下3種:exec, eval, single。
③ 能否介紹一下用python編寫和編譯文件後的後綴名的意思嗎
除了GUI程序,其它類型的沒有特殊的後綴。
例如:
利用py2exe模塊
hello.py 代碼
print 'hello,world!'
raw_input('Press <enter>')
配置 setup.py 代碼
from distutils.core import setup
import py2exe
setup(console=['hello.py'])
最後你將兩個文件存放在一塊。在cmd下執行 c:pythonx.xpython setup.py py2exe
也有其它庫完成exe。如:PyInstaller+pywin32
(3)python中文編譯文件擴展閱讀:
Python在執行時,會將py文件中的源代碼編譯成Python的byte code(位元組碼),然後再由Python Virtual Machine(Python虛擬機)來執行這些編譯好的byte code。這種機制的基本思想跟Java,.NET是一致的。
Python Virtual Machine與Java或.NET的Virtual Machine不同的是,Python的Virtual Machine是一種更高級的Virtual Machine。這里的高級並不是通常意義上的高級,不是說Python的Virtual Machine比Java或.NET的功能更強大,而是說和Java 或.NET相比,Python的Virtual Machine距離真實機器的距離更遠。