Python: encontrar todos os pacotes dentro de um pacote
Pergunta
Dado um pacote, como posso encontrar automaticamente todas as suas sub-pacotes?
Solução
Você não pode confiar na introspecção de módulos carregados, porque sub-pacotes podem não ter sido carregado. Você tem que olhar para o sistema de arquivos, assumindo que o pacote de nível superior em questão não é um ovo, arquivo zip, módulo de extensão, ou carregado a partir da memória.
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))
Outras dicas
Inspirado pela resposta de 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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow