パッケージが与えられた場合、どうすればそのすべてのサブパッケージを自動的に見つけることができますか?
2484 次
2 に答える
10
サブパッケージがロードされていない可能性があるため、ロードされたモジュールのイントロスペクションに依存することはできません。問題のトップレベルパッケージがegg、zipファイル、拡張モジュール、またはメモリからロードされていないことを前提として、ファイルシステムを確認する必要があります。
def get_subpackages(module):
dir = os.path.dirname(module.__file__)
def is_package(d):
d = os.path.join(dir, d)
return os.path.isdir(d) and glob.glob(os.path.join(d, '__init__.py*'))
return filter(is_package, os.listdir(dir))
于 2009-05-06T22:11:51.587 に答える
0
ジェームズエマートンの答えに触発されました:
def find_subpackages(module):
result=[]
for thing in os.listdir(os.path.dirname(module.__file__)):
full=os.path.join(os.path.dirname(module.__file__),thing)
if os.path.isdir(full):
if glob.glob(os.path.join(full, '__init__.py*'))!=[]:
result.append(thing)
return result
于 2009-05-06T22:32:25.077 に答える