Bastien ya ha respondido a la pregunta, de todos modos se puede encontrar útil esta función que utilizo para cargar todos los módulos de una subcarpeta en un diccionario:
def loadModules():
res = {}
import os
# check subfolders
lst = os.listdir("services")
dir = []
for d in lst:
s = os.path.abspath("services") + os.sep + d
if os.path.isdir(s) and os.path.exists(s + os.sep + "__init__.py"):
dir.append(d)
# load the modules
for d in dir:
res[d] = __import__("services." + d, fromlist = ["*"])
return res
Esta otra es crear una instancia de un objeto de una clase definida en uno de los módulos cargados por la primera función:
def getClassByName(module, className):
if not module:
if className.startswith("services."):
className = className.split("services.")[1]
l = className.split(".")
m = __services__[l[0]]
return getClassByName(m, ".".join(l[1:]))
elif "." in className:
l = className.split(".")
m = getattr(module, l[0])
return getClassByName(m, ".".join(l[1:]))
else:
return getattr(module, className)
una forma sencilla de utilizar esas funciones es la siguiente:
mods = loadModules()
cls = getClassByName(mods["MyModule"], "submodule.filepy.Class")
obj = cls()
Obviamente, puede reemplazar todas las referencias de subcarpetas de "servicios" por parámetros.
posible duplicado de [la carga dinámica de módulos de Python] (http://stackoverflow.com/questions/769534/dynamic-loading-of- python-modules) –
Posible duplicado de [Importación de módulos dinámicos en Python] (https://stackoverflow.com/questions/301134/dynamic-module-import-in-python) – scai