python: список модулей в пакете - PullRequest
1 голос
/ 29 марта 2010

У меня есть пакет с несколькими модулями, каждый модуль имеет определенный класс (или несколько классов). Мне нужно получить список всех модулей в пакете. Есть ли API для этого в Python?

Вот структура файла:

\pkg\
\pkg\__init__.py
\pkg\module1.py -> defines Class1
\pkg\module2.py -> defines Class2
\pkg\module3.py -> defines Class3 and Class31

из module1 Мне нужно получить список модулей в pkg , а затем импортировать все классы, определенные в этих модулях

Обновление 1: Хорошо, после рассмотрения ответов и комментариев ниже я понял, что это не так просто, чтобы удовлетворить мою потребность. Чтобы код, который я предложил ниже, работал, все модули должны быть явно импортированы заранее.

Итак, теперь новая концепция: Как получить список модулей внутри пакета без загрузки модулей? Используя python API, т.е. без перечисления всех файлов в папке пакета?

Спасибо ак

Ответы [ 2 ]

1 голос
/ 29 марта 2010

Один из специальных подходов - перечислить файлы в каталоге, динамически импортировать каждый файл с помощью __import__, а затем перечислить классы получившегося модуля.

0 голосов
/ 29 марта 2010

хорошо, это было довольно просто:

import pkg

sub_modules = (                                 
    pkg.__dict__.get(a) for a in dir(pkg) 
    if isinstance(                              
        pkg.__dict__.get(a), types.ModuleType
    )                                           
)               

for m in sub_modules:                                      
    for c in (                                             
        m.__dict__.get(a) for a in dir(m)                  
        if isinstance(m.__dict__.get(a), type(Base))
    ):          
        """ c is what I needed """
...