Come importare classi Python da una directory padre

Cerca

In questa guida vediamo come importare delle classi Python che sono contenute in una parent directory. Referenziare ed importare moduli contenuti in una directory padre non è consentito dalla Python 3.3 e successive. Vediamo di affrontare il problema con uno scenario concreto.

Scenario

Abbiamo la seguente struttura di cartelle e file python:

				
					app
  -classes
    -car.py
    -bike.py
  -scripts
    -run.py
				
			

Dallo script run.py vogliamo importare la classe car.py e bike.py, ma per quanto detto precedentemente, non possibile importare un modulo contenuto in una directory padre o in altra sua sottodirectory, pertanto ci si imbatte in un errore simile a questo:

				
					Traceback (most recent call last):
  File "/app/scripts/run.py", line 6, in <module>
    from classes.car import *
ModuleNotFoundError: No module named 'classes'
				
			

Soluzione 1: Usare il metodo sys.path

In questo caso utilizziamo il modulo sys ed impostiamo il path che porta al modulo richiesto.

Aggiungiamo il percorso al sys.path utilizzando il metodo append(). Questo metodo viene utilizzato per aggiungere uno specifico percorso da rendere disponibile agli interpreti per le loro ricerche delle classi.

				
					import sys
# setting path
sys.path.append('/app/classes')
 
# importing
from car import *
from bike import *
 
# using
get_car_brand()
set_bike_model('Ducati')
				
			

Soluzione 2: Usare il metodo os.path.abspath()

In questo caso utilizziamo il modulo sys unitamente al modulo path per estrarre la directory contenente le classi da importare e successivamente aggiungerla al path.

				
					import pathlib
import sys
# directory reach
directory = pathlib.Path(__file__).parent.resolve()
print(directory.parent)
# setting path
sys.path.append(str(directory.parent) + "/classes")
# importing
from car import *
from bike import *
# using
get_car_brand()
set_bike_model('Ducati')
				
			

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.

Most Recent

Come aggiornare mailcow

In questo scenario viene illustrato come eseguire l’aggiornamento di un’istanza di mailcow dockerized utilizzando i tools in esso integrati. Aggiornamento automatico Nella directory di mailcow-dockerized

Partners