Importar carpeta de módulos en Python.

¿Es posible en Python obtener una lista de módulos de una carpeta / paquete e importarlos?

Me gustaría poder hacer esto desde una función dentro de una clase, para que toda la clase tenga acceso a ellos (posiblemente hecho desde el método __init__ ).

Cualquier ayuda sería muy apreciada.

Ver el documento de módulos .

La única solución es que el autor del paquete proporcione un índice explícito del paquete. La statement de importación usa la siguiente convención: si el código __init__.py un paquete define una lista llamada __all__ , se considera la lista de nombres de módulos que deben importarse cuando se encuentra desde la importación de paquetes *. Depende del autor del paquete mantener esta lista actualizada cuando se lance una nueva versión del paquete. Los autores de paquetes también pueden decidir no admitirlo, si no ven un uso para importar * de su paquete. Por ejemplo, el archivo sonidos / efectos / __init__.py podría contener el siguiente código:

 __all__ = ["echo", "surround", "reverse"] 

Esto significaría que desde sound.effects import * importaría los tres submódulos nombrados del paquete de sonido.

Sí, puede encontrar una manera de hacer esto haciendo una lista de directorios para los archivos en el directorio e importándolos manualmente. Pero no hay syntax incorporada para lo que estás preguntando.

Puedes conocer la lista de los módulos con la función dir.

 import module dir (module) 

Más adelante en un progtwig, puede importar una sola función:

 from module import function 

El módulo de distribute proporciona un mecanismo que hace mucho de esto. Primero, puede comenzar enumerando los archivos de Python en un paquete usando pkg_resources.resource_listdir :

 >>> module_names = set(os.path.splitext(r)[0] ... for r ... in pkg_resources.resource_listdir("sqlalchemy", "/") ... if os.path.splitext(r)[1] in ('.py', '.pyc', '.pyo', '') ... ) - set(('__init__',)) >>> module_names set(['engine', 'util', 'exc', 'pool', 'processors', 'interfaces', 'databases', 'ext', 'topological', 'queue', 'test', 'connectors', 'orm', 'log', 'dialects', 'sql', 'types', 'schema']) 

A continuación, puede importar cada módulo en un bucle:

 modules = {} for module in module_names: modules[module] = __import__('.'.join('sqlalchemy', module))