es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo acceder al nombre del entorno en el flujo de trabajo de Kedro

¿Hay alguna forma de acceder al nombre del entorno de la tubería kedro? En realidad, este es mi problema.

Estoy cargando las rutas de configuración de la siguiente manera:

conf_paths = ["conf/base", "conf/local"]
conf_loader = ConfigLoader(conf_paths)
parameters = conf_loader.get("parameters", "parameters/*")
catalog = conf_loader.get("catalog")

Pero tengo algunos entornos como “conf/server”, “conf/test”, etc. Por lo tanto, si tengo disponible el nombre del entorno, puedo agregarlo a conf_paths como “conf/” para que kedro lea los archivos de la carpeta correspondiente al entorno. Pero ahora, si no agrego la ruta del entorno a conf_paths, los archivos no son leídos por kedro incluso si especifico el nombre del entorno cuando ejecuto kedro como kedro run --env=server. He buscado en toda la documentación pero no pude encontrar ninguna solución.

EDIT:

Ampliando más sobre el problema. Estoy utilizando los diccionarios de parámetros y catálogos mencionados anteriormente en los nodos. Solo tengo claves que son comunes para todas las ejecuciones en conf/base/parameters.yml y las claves específicas del entorno en conf/server/parameters.yml, pero cuando ejecuto kedro run --env=server, obtengo un keyerror, lo que significa que las claves en conf/server/parameters.yml no están disponibles en el diccionario de parámetros. Si agrego conf/server a config_paths, kedro se ejecuta correctamente sin keyerror.

Tags:  ,

Answer

  1. Avatar for davy.ai

    A partir de Kedro 0.17.0, no hay una forma directa de acceder al nombre del entorno del pipeline dentro del mismo pipeline. Esto significa que no puedes simplemente agregar el nombre del entorno al camino del archivo de configuración basado en el entorno del pipeline.

    Una solución alternativa a este problema es definir los caminos de configuración específicos del entorno en el archivo run.py del proyecto. En la función run(), puedes utilizar la función get_project_context() para obtener el objeto KedroContext actual y luego acceder a su atributo env para obtener el nombre del entorno actual del pipeline. Con esta información, puedes modificar la lista conf_paths correspondientemente antes de ejecutar el pipeline.

    Aquí tienes un ejemplo de cómo lograr esto:

    from kedro.framework.context import KedroContext, load_context
    from kedro.framework.project import configure_project
    
    # Define environment-specific configuration paths
    ENV_CONF_PATHS = {
        "server": ["conf/server"],
        "test": ["conf/test"]
    }
    
    def run():
        # Instantiate KedroContext and get environment name
        context = load_context(Path.cwd())
        env_name = context.env.name
    
        # Modify conf_paths based on environment name
        conf_paths = ["conf/base", "conf/local"]
        if env_name in ENV_CONF_PATHS:
            conf_paths += ENV_CONF_PATHS[env_name]
    
        # Load configuration and catalog
        conf_loader = ConfigLoader(conf_paths)
        parameters = conf_loader.get("parameters*", "parameters*/**")
        catalog = conf_loader.get("catalog*")
    
        # Run the pipeline
        context.run()
    
    if __name__ == "__main__":
        run()
    

    Con esta configuración, al ejecutar kedro run --env=server, se agregará "conf/server" a la lista conf_paths y se harán disponibles los archivos de configuración específicos del entorno para cargar.

Comments are closed.