So che questo thread è un po 'vecchio, ma mi ci è voluto del tempo per arrivare al nocciolo della questione, quindi ho voluto condividerlo.
Nel mio progetto, avevo lo script principale in una directory principale e, per differenziare i moduli, ho messo tutti i moduli di supporto in una sottocartella chiamata "moduli". Nel mio script principale, importa questi moduli in questo modo (per un modulo chiamato report.py):
from modules.report import report, reportError
Se chiamo il mio script principale, funziona. TUTTAVIA, volevo testare ogni modulo includendone uno main()
in ciascuno e chiamando ciascuno direttamente, come:
python modules/report.py
Ora Python si lamenta di non riuscire a trovare "un modulo chiamato moduli". La chiave qui è che, per impostazione predefinita, Python include la cartella dello script nel suo percorso di ricerca, MA NON IL CWD. Quindi ciò che questo errore dice, in realtà, è "Non riesco a trovare una sottocartella dei moduli". Il motivo è che non esiste una sottodirectory "moduli" dalla directory in cui risiede il modulo report.py.
Trovo che la soluzione più pulita a questo sia aggiungere il CWD nel percorso di ricerca di Python includendo questo in alto:
import sys
sys.path.append(".")
Ora Python cerca in CWD (directory corrente), trova la sottocartella "moduli" e tutto va bene.