おそらくこれを行うべきではありません: の既定の動作import
は非常に柔軟です。モジュール (またはその他の変数) を自動的にエクスポートしたくない場合は、で始まる名前を付けて_
ください。python はそれをエクスポートしません。これは標準的な python の方法であり、車輪の再発明は非 pythonic と見なされます。また、モジュール以外にもエクスポートが必要な場合があることを忘れないでください。を設定__all__
したら、それらも検索してエクスポートする必要があります。
それでも、エクスポート可能なモジュールのリストを最適に生成する方法を尋ねます。存在しないものをエクスポートすることはできないため、メイン モジュールで認識されている独自のモジュールを確認します。
basedir = os.path.dirname(__file__)
for m in sys.modules:
if m in locals() and not m.startswith('_'): # Only export regular names
mod = locals()[m]
if '__file__' in mod.__dict__ and mod.__file__.startswith(basedir):
print m
sys.modules
メインモジュールにエクスポートされていない多くのモジュールを含め、python がロードしたすべてのモジュールの名前が含まれていますlocals()
。
.py
これは、ファイルシステムをスキャンするよりも高速であり、ディレクトリ ツリー内のすべてのファイルが何らかの形で最上位のサブモジュールになると想定するよりも堅牢です。__init__.py
当然、すべてがロードされたときに、このコードを の最後近くで実行する必要があります。