Script de importación relativa de Python dos niveles más arriba

2 minutos de lectura

He estado luchando con las importaciones en mi paquete durante la última hora.

Tengo una estructura de directorios así:

main_package
 |
 | __init__.py
 | folder_1
 |  | __init__.py
 |  | folder_2
 |  |  | __init__.py
 |  |  | script_a.py
 |  |  | script_b.py
 |
 | folder_3
 |  | __init__.py
 |  | script_c.py

Quiero acceder al código en script_b.py así como el código de script_c.py de script_a.py. ¿Cómo puedo hacer esto?

Si pongo un simple import script_b en el interior script_a.pycuando corro

from main_package.folder_1.folder_2 import script_b

me encuentro con un

ImportError: no module named "script_b"

Para acceder script_c.py, No tengo ni idea. No pude encontrar ninguna información sobre cómo acceder a los archivos dos niveles más arriba, pero sé que puedo importar archivos un nivel más arriba con

from .. import some_module

¿Cómo puedo acceder a estos dos archivos desde script_a.py?

  • Posible duplicado de Cómo lograr esta importación relativa en python

    – Ani Menón

    24 de abril de 2016 a las 18:04

avatar de usuario
tobspr

Para acceder a script_c y script_b desde script_a, usaría:

from ...folder_3 import script_c
from . import script_b

O si usa python3, puede importar script_b desde script_a simplemente usando:

import script_b

Sin embargo, probablemente debería usar importaciones absolutas:

from mypackage.folder_3 import script_c
from mypackage.folder1.folder2 import script_b

Ver también: Importaciones absolutas vs relativas

  • ¿Qué pasa con el acceso script_b?

    – Lucas Taylor

    24 de abril de 2016 a las 18:03

  • Que es ... ¿significar?

    – mrgloom

    11/09/2019 a las 13:50

  • @mrgloom Significa subir dos directorios: directorio actual: . subir un directorio: .. subir dos directorios: ....

    – Adam Ericson

    22 de enero de 2020 a las 21:57


  • import ...utility_functions.plot_figures as plotfgs ^ SyntaxError: invalid syntax Python muestra un error de sintaxis para…

    – Aarón John Sabu

    21 de julio de 2021 a las 11:47


¿Ha sido útil esta solución?