Il problema è che quando si esegue da una directory, per impostazione predefinita solo i pacchetti che sono sottodirectory sono visibili come importazioni candidate, quindi non è possibile importare a.b.d. Puoi comunque importare b.d. poiché b è un pacchetto secondario di a.
Se si desidera importare a.b.d in c/__init__.py
, è possibile eseguire questa operazione modificando il percorso del sistema in modo che sia una directory sopra a e modificare l'importazione in a/__init__.py
da importare a.b.c.
tuo a/__init__.py
dovrebbe essere simile a questo:
import sys
import os
# set sytem path to be directory above so that a can be a
# package namespace
DIRECTORY_SCRIPT = os.path.dirname(os.path.realpath(__file__))
sys.path.insert(0,DIRECTORY_SCRIPT+"/..")
import a.b.c
Un'ulteriore difficoltà sorge quando si desidera eseguire moduli in C come script. Qui i pacchetti aeb non esistono. È possibile modificare il numero __int__.py
nella directory c per puntare sys.path alla directory di livello superiore e quindi importare __init__
in qualsiasi modulo in c per poter utilizzare il percorso completo per importare a.b.d. Dubito che sia una buona pratica importare __init__.py
ma ha funzionato per i miei casi d'uso.
fonte
2015-08-30 23:33:12
Forse potresti provare le importazioni relative? http://stackoverflow.com/questions/72852/how-to-do-relative-imports-in-python – eremzeit
questo può aiutare https://ncoghlan_devs-python-notes.readthedocs.org/en /latest/python_concepts/import_traps.html – maazza
anche come riferimento, sembra che le importazioni circolari siano consentite su python 3.5 (e probabilmente oltre) ma non su 3.4 (e probabilmente sotto). –