をここです簡単な(そして少し初歩的な;-)モジュール名の用語で「何をインポートしようとしている人」トレースする方法:
import inspect
import __builtin__
savimp = __builtin__.__import__
def newimp(name, *x):
caller = inspect.currentframe().f_back
print name, caller.f_globals.get('__name__')
return savimp(name, *x)
__builtin__.__import__ = newimp
与える、例えば()tracimp.py
としてこれを保存した:
$ python -c 'import tracimp; import email; import sys; import email.mime'
email __main__
sys email
email.mime email
sys __main__
email.mime __main__
ご覧のとおり、__import__
を「ラッピングする」という特有の特徴の1つは、インポートするモジュールが既にsys.modules
にあるという事実によって消されないということです。これは世話を__import__
のジョブの1つとしているためです、私たちのラッパーは両方のモジュール "最初にロードされて"呼び出されますとは、以前にすでにインポートされているため、sys.modules
からフェッチされます。これは、循環インポートを診断しようとしているときには本当に便利です(インポートされたインポータという2つのモジュール名でエッジが識別される有向グラフのループを見つけることに至ります。出力ライン)。
たぶん後半
Snakefoodが私の望むものになった。しかし、より多くのファイルを扱うためにはマッサージが必要です。 – Jeff
@Jeff:はい、セットアップには少し時間がかかり、ドキュメントを読むことは必須です。私はあなたがそれを働かせることができてうれしいです! – unutbu