2013-06-10 11 views
6

ich ein Paket Layout haben:Python pkgutil.walk_packages nicht Rückkehr Subpackages

scenarios/ 
    __init__.py 
    X/ 
     __init__.py 
     Y/ 
      __init__.py 
    Z/ 
     __init__.py 

I

import scenarios 
pkgutil.walk_packages(scenarios.__path__, scenarios.__name__ + '.') 

Aber dies erzeugt eine Liste nur dann ausgeführt haben, einschließlich der Pakete X und Z, Y fehlt. Was kann ich verwenden, um alle Unterverzeichnisse zu erhalten? Hier

Dank

Antwort

5

ist eine Theorie: Die walk_packages Funktion versucht, jedes Modul zu importieren aufgelistet. Wenn es zum Unterpaket "Y" kommt, versucht es es zu importieren, aber es gibt einen Fehler. Standardmäßig wird dieser Fehler unterdrückt. Ein Nebeneffekt ist, dass die Funktion walk_packages nicht in Y rekursiv ist. Sie können diese Theorie mit dem Schlüsselwort "onerror" testen. Zum Beispiel:

import sys, pkgutil 
from traceback import print_tb 

def onerror(name): 
    print("Error importing module %s" % name) 
    type, value, traceback = sys.exc_info() 
    print_tb(traceback) 

import scenarios 
pkgutil.walk_packages(scenarios.__path__, scenarios.__name__ + '.', onerror=onerror)