私は、日々のコーディングを支援するために、多くの個人用ライブラリを作成しました。ベスト プラクティスは、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 関数内にある場合はどうなるでしょうか?
私が直面している問題は、単純なプログラムをライブラリから 1 つまたは 2 つのクラスまたは関数のみを使用する実行可能ファイルに変換する場合です。実行可能ファイルは最終的に 50 MB 程度になります。
py2exe のサイズの最適化ページを読み、その提案のいくつかを使用して最適化できます。
http://www.py2exe.org/index.cgi/OptimizingSize
ここでベストプラクティスを本当に求めていると思います。依存関係が未使用の関数またはクラスにあるライブラリのインポートを排除する方法はありますか? デバッガーを使用して import ステートメントが実行されるのを見てきましたが、Python は先に進む前に「def somefunction」を含む行のみを「ピックアップ」しているようです。関数/クラスが使用されるまで、残りのインポートは完了しませんか? これは、関数またはクラスの先頭に大量のインポートを配置すると、残りのライブラリのオーバーヘッドを削減できることを意味します。