Python: поиск всех пакетов внутри пакета - PullRequest
9 голосов
/ 07 мая 2009

Учитывая пакет, как я могу автоматически найти все его подпакеты?

Ответы [ 2 ]

10 голосов
/ 07 мая 2009

Вы не можете полагаться на самоанализ загруженных модулей, поскольку подпакеты могут быть не загружены. Вам придется взглянуть на файловую систему, предполагая, что рассматриваемый пакет верхнего уровня не является яйцом, файлом 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))
0 голосов
/ 07 мая 2009

Вдохновленный ответом Джеймса Эмертона:

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
...