【发布时间】:2010-10-24 08:07:08
【问题描述】:
给定一个包,如何自动找到它的所有子包?
【问题讨论】:
给定一个包,如何自动找到它的所有子包?
【问题讨论】:
您不能依赖已加载模块的自省,因为可能尚未加载子包。您必须查看文件系统,假设有问题的顶级包不是鸡蛋、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))
【讨论】:
py 后面加上问号可以吗?如果没有pyc 或pyo 文件,它不会不起作用吗?
灵感来自 James Emerton 的回答:
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
【讨论】: