1) Assicurarsi di disporre di un file vuoto __init__.py
in subdir
.
2) Utilizzare un percorso completo; qualcosa di simile:
import os
import sys
sys.path.append(os.path.join(os.path.dirname(__file__), 'subdir'))
Edit: fornire maggiori informazioni per rispondere alle domande poste in un commento.
As Nick Johnson demonstrates è possibile inserire queste tre righe di codice in un file denominato fix_path.py
. Quindi, nel file main.py
, fare questo import fix_path
prima di tutte le altre importazioni. Link to a tested application using this technique.
E, sì, è necessario il file __init__.py
; per la documentation:
Quando si importa il pacchetto, Python ricerche attraverso le directory su sys.path cercando per il pacchetto sottodirectory.
I file __init__.py
sono necessari per fare in modo che Python tratti le directory come pacchetti contenenti ; questo viene fatto per impedire che le directory con un nome comune , come una stringa, da nascondano involontariamente moduli validi che si verificano in seguito sul percorso di ricerca modulo . Nel caso più semplice, __init__.py
può essere solo un file vuoto, ma può anche eseguire il codice di inizializzazione per il pacchetto o impostare la variabile __all__
, descritta in seguito.
$ 10 dice che ha avuto un errante '.pyc' file se l'errore "si fissa". –