2012-07-13 23 views
9

我正在尋找編譯相當大的一組python模塊和包到pyo。我知道這可以通過設置PYTHONOPTIMIZE環境變量或在啓動時指定-O來實現。我想執行pyo而不是pyc來產生最小的覆蓋區域。爲了在我的部署模塊中做到這一點,我必須創建一個包裝腳本來啓動具有-O選項的實際腳本,因爲在啓動解釋器之前需要指定環境變量。編譯.py文件到.pyo而不訴諸包裝腳本

有沒有辦法解決這個問題,並以編程方式強制執行pyo創建?

親切的問候, 托爾斯滕

回答

17

編譯所有模塊事前,運行以下命令:

python -O -m compileall /path/to/your/files 

python compileall module負責編制的,該-O switch使得輸出.pyo文件。

但是,你不能強迫的Python除非-O開關,給出了每次運行PYTHONOPTIMIZE environment var被設置爲使用這些。

注意,所有的-O標誌確實是禁用assert語句和__debug__標誌設置爲False(和Python將優化進行的測試)。指定-OO和文檔字符串被刪除。除非您使用過多的文檔字符串大小或非常慢的調試代碼,否則這些速度差異或空間節省不會太大。

請參見:What does Python optimization (-O or PYTHONOPTIMIZE) do?

+0

感謝您的回答,但上面所概述我知道開關的,想避免它。原因是,這是一個部署工具,我想避免人們意外地部署同一文件的兩個不同版本(pyc和pyo)。目前我通過使用os.system將python.exe -O調用包裝到python腳本中。這有效,但有點奇怪,所以我想知道我是否可以擺脫這一點。 – 2012-07-13 15:07:21

+0

很高興能夠以編程方式控制它(更容易)... – martineau 2012-07-13 15:36:55

+0

「請注意,所有-O標誌都會禁用assert語句,指定-OO和docstrings會被刪除,這不會造成很大的速度差異或節省空間。「 < - 這真的取決於你有多少'assert'和'if __debug__'聲明不是嗎?你知道他們對假設的看法。 – DylanYoung 2017-12-14 21:00:22