2016-03-21 13 views
1

Ich möchte eine dynamische Liste von Modulen aus einem Paket zur Verfügung stellen. Layout:Python: Module in einem Paket bekommen

modules/ 
    __init__.py 
    index.py 
    user.py 

Im Moment habe ich ein modulelist Tupel statisch definiert wie folgt:

modulelist = ('index','user') 

Und ich Zugriff dann from modules import modulelist

Was die kanonische Weise ist das Tupel zur Verfügung zu stellen (oder Liste) dynamisch ?

+0

Es gibt keinen kanonischen Weg zu Module dynamisch importieren Der Implementor kann einige in 'modules/__ init __. Py' importiert haben, aber es gibt keine Möglichkeit zu wissen, welche Module überhaupt importiert werden sollen. – tdelaney

+0

genauer gesagt, gibt es eine sichere Möglichkeit, eine Liste der Module im Paket zu rendern? im Ordner 'modules' in diesem Fall – Wells

Antwort

0

Hier ist ein Ausschnitt mit pkgutil.walk_packages (docs hier: https://docs.python.org/2/library/pkgutil.html#pkgutil.walk_packages):

# In your case -- you can however substitute any package 
import modules 
mod = modules 

for _, module_name, _ in pkgutil.walk_packages(
    mod.__path__, 
    prefix=mod.__name__ + '.', 
): 
    # Do something with module_name 

ich dies in ein paar Orte in Code verwendet habe ich geschrieben habe: