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.

Importaciones relativas en Python.. nuevamente

Me he vuelto a atascar con las importaciones relativas, una vez más.. No sé por qué, después de un tiempo, siempre vuelvo a este problema, el cual me vuelve loco por razones obvias. Sin embargo, leí la documentación, posts aquí, y solo quiero ponerlo aquí. Supongamos este proyecto:

-- myproject/
      - main.py {...}
      --first_package/
          -__init__.py
          -a.py   {from second_package import c}
          -b.py   {from second_package.c import foo}
      --second_package/
          -__init__.py
          -c.py   {def foo(): pass}

Después de una hora, decidí ponerlo aquí para mi futuro yo, así como para ustedes.

Las importaciones de a.py y b.py no funcionarán cuando ejecutes los scripts directamente de esta manera python3 first_package/[a|b].py, lanzará ModuleNotFoundError: No module named 'second_package'.

Esto solo funcionará si A y B se importan ellos mismos.

Entonces, en main.py: import first_package.a y luego las importaciones dentro de esos módulos funcionarán. No sé, pero muchos posts y tutoriales se olvidan de esto. De vez en cuando, simplemente olvido que tengo que pasar por main.py y una vez al año pierdo una hora de mi vida.

Además, no quiero revisar la documentación para esto, así que si alguien tiene una explicación técnica para esto, por favor, siéntase libre de explicarlo en detalle. Diviértanse, chicos. Q.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Explicación de las Importaciones Relativas en Python

    Las importaciones relativas en Python se utilizan para importar módulos que están relacionados con el módulo actual que se está importando. Cuando usas una importación relativa, se asume que el módulo que estás importando se encuentra en un directorio relativo al módulo actual.

    En el proyecto de ejemplo mencionado anteriormente, hay dos paquetes: first_package y second_package. Los archivos a.py y b.py en el paquete first_package intentan importar el módulo c.py del paquete second_package.

    Cuando ejecutas estos scripts directamente usando python3 first_package/[a|b].py, las importaciones fallarán porque Python no puede localizar el módulo second_package. Esto se debe a que Python está buscando el módulo en la ruta de tu sistema, y no en la ubicación relativa al módulo actual.

    Para que las importaciones funcionen, debes ejecutarlos desde un script que importe first_package.a o first_package.b. Cuando importas first_package.a o first_package.b desde main.py, Python es capaz de localizar el módulo second_package porque la ruta relativa de second_package ya está establecida.

    En conclusión, si estás utilizando importaciones relativas en Python, asegúrate de importar el módulo que contiene las importaciones relativas desde un script fuera del paquete.

Comments are closed.