我已經創建了許多個人庫來幫助我進行日常編碼。最好的做法是在Python程序的開始部分放置導入。但是說我導入我的庫,或者甚至只是從庫中的一個函數或類。所有模塊都被導入(即使這些模塊用於其他未使用的類或函數中)。我認爲這會增加程序的開銷?控制python導入以減小大小和開銷
一個例子。我有一個名爲pytools的庫,它看起來像這樣
import difflib
def foo():
# uses difflib.SequenceMatcher
def bar():
# benign function ie
print "Hello!"
return True
class foobar:
def __init__():
print "New foobar"
def ret_true():
return True
foo函數使用difflib。現在說我正在寫一個需要使用bar和foobar的新程序。我既可以寫
import pytools
...
item = pytools.foobar()
vals = pytools.bar()
或者我可以做
from pytools import foobar, bar
...
item = foobar()
vals = bar()
無論是否選擇開銷減少或排除foo和其對difflib依賴進口?如果difflib的導入位於foo函數內部會怎麼樣?
我遇到的問題是將簡單的程序轉換爲只能使用一個或兩個類或函數從我的庫中的可執行文件,可執行文件最終是50 MB左右。
我已經通過py2exe的優化大小頁面閱讀,並可以優化使用它的一些建議。
http://www.py2exe.org/index.cgi/OptimizingSize
我猜我真的要求的最佳實踐在這裏。有沒有辦法阻止依賴關係處於未使用函數或類的庫的導入?我看過導入語句是使用調試器執行的,看起來python只是在繼續之前用「def somefunction」「拾取」該行。在使用函數/類之前,其餘的導入是否完成?這意味着在一個函數或類的開頭部署高容量導入可以減少庫的其餘部分的開銷。
這實際上是一個關於從Python代碼到二進制文件的轉換器的問題。你在使用哪種轉換器? –
我不知道如何檢查?我正在使用python 2.6,如果有幫助 –
你在說「將簡單的程序轉換成可執行文件......」。您將需要一些程序來執行此轉換。這個程序將決定包含哪些模塊。 –