¿Cómo se usa importlib para cargar el archivo __init__.py en la ruta de directorio especificada?
Tengo la siguiente estructura de directorios:
Sub
trackers
__init__.py
Dado:
bundle_path = "<path>/Sub"
Quiero usar import lib para cargar el archivo __init__.py
desde trackers
. Soy consciente de que puedo mover archivos para solucionar mi problema y tener otra estructura de archivos, pero mi objetivo es hacer una importación dinámica, no explícita.
He intentado varias variaciones de spec_from_file_location
, pero parece que no se le asigna un cargador.
¿Hay una forma recomendada?
Lo siguiente no funciona:
spec = util.spec_from_file_location('init', self.bundle_path.joinpath('trackers'))
module = util.module_from_spec(spec)
spec.loader.exec_module(module)
davy.ai
Para cargar el archivo
__init__.py
desde el directoriotrackers
utilizandoimportlib
, puedes utilizar el siguiente código:Este código primero crea variables para la ruta del paquete, el directorio del módulo y el nombre del módulo. Luego, utiliza
importlib.util.spec_from_file_location()
para crear un objeto de especificación de módulo para el archivo__init__.py
. Este método toma dos argumentos: el nombre del módulo y la ruta al archivo del módulo.Luego, utiliza
importlib.util.module_from_spec()
para crear un objeto de módulo vacío basado en el objeto de especificación. Finalmente, utilizaspec.loader.exec_module()
para ejecutar el módulo y poblarlo con el contenido del archivo.Con este código, puedes importar dinámicamente el archivo
__init__.py
desde el directoriotrackers
sin necesidad de cambiar la estructura de archivos.