Importando módulos desde una carpeta vecina en Python

He puesto la pregunta en la siguiente figura:

introduzca la descripción de la imagen aquí

EDITAR La pregunta junto a la figura es:

¿Cómo hago que script_A1 importe una función desde script_B2?

Preguntas similares se han hecho antes. Pero la mayoría de las respuestas sugieren agregar el módulo / script / paquete (lo que sea) a la variable PATH. Por ejemplo:

sys.path.append('...') 

Pero agregar el módulo a la variable PATH simplemente se siente tan mal. No quiero alterar mi sistema de ninguna manera. Cuando mi aplicación se cierra, quiero que mi entorno Python esté limpio y “intacto”. Me temo que agregar módulos no controlados a las variables PATH en mi sistema causará dolores de cabeza más adelante.

Gracias por ayudarme 🙂

Puedes usar un truco para agregar la carpeta superior a la ruta:

 import sys sys.path.append('..') import folderB.something 

También puede usar imp.load_source si lo prefiere.

Ponga esto en la parte superior de script_A1;

from folderB.script_B2 import YourClass as your_class

Creo que resolví el problema.

De la siguiente manera, puede agregar el directorio padre al PATH. Ponga esto en la parte superior de script_A1 :

 import sys import os myDir = os.path.dirname(os.path.abspath(__file__)) parentDir = os.path.split(myDir)[0] if(sys.path.__contains__(parentDir)): print('parent already in path') pass else: print('parent directory added') sys.path.append(parentDir) # Now comes the rest of your script 

Puede verificar que el directorio principal myProject se haya agregado efectivamente a la RUTA imprimiendo:

  print(sys.path) 

Como el directorio primario myProject ahora forma parte de la RUTA, puede importar scripts / modules / lo que sea desde cualquiera de sus subdirectorios. Así es como importas script_B2 desde folder_B :

 import folder_B.script_B2 as script_B2 

Después de cerrar su aplicación, puede verificar si su entorno Python se ha restaurado a su estado inicial. simplemente imprima la RUTA nuevamente y verifique si el directorio que ha adjuntado ha desaparecido.