Python:查找包中的所有包

时间:2009-05-06 22:00:40

标签: python import packages

给定一个包,我该如何自动找到它的所有子包?

2 个答案:

答案 0 :(得分:10)

您不能依赖已加载模块的内省,因为可能尚未加载子包。假设有问题的顶级包不是鸡蛋,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))

答案 1 :(得分: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