简体   繁体   English

Python:查找包中的所有包

[英]Python: Finding all packages inside a package

给定一个包,我怎样才能自动找到它的所有子包?

You can't rely on introspection of loaded modules, because sub-packages may not have been loaded. 您不能依赖已加载模块的内省,因为可能尚未加载子包。 You'll have to look at the filesystem, assuming the top level package in question is not an egg, zip file, extension module, or loaded from memory. 假设有问题的顶级包不是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))

Inspired by James Emerton's answer: 受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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM