Ho una struttura di directory simile al seguenteimportazione funzione locale da un modulo ospitato in un'altra directory con le importazioni relative a notebook jupyter utilizzando python3
meta_project
project1
__init__.py
lib
module.py
__init__.py
notebook_folder
notebook.jpynb
Quando si lavora in notebook.jpynb
se cerco di usare una di importazione rispetto a accedere ad una funzione function()
in module.py
con:
from ..project1.lib.module import function
ottengo il seguente errore
SystemError Traceback (most recent call last)
<ipython-input-7-6393744d93ab> in <module>()
----> 1 from ..project1.lib.module import function
SystemError: Parent module '' not loaded, cannot perform relative import
C'è un modo per farlo funzionare utilizzando le importazioni relative?
Nota: il server del notebook viene istanziato al livello della directory meta_project
, quindi dovrebbe avere accesso alle informazioni in tali file.
Nota, inoltre, che almeno come originariamente previsto project1
non è stato pensato come un modulo e quindi non ha un file __init__.py
, era solo inteso come una directory del file system. Se la soluzione al problema richiede di trattarlo come un modulo e includere un file __init__.py
(anche uno vuoto) va bene, ma farlo non è sufficiente per risolvere il problema.
Condivido questa directory tra le macchine e le importazioni relative mi consentono di utilizzare lo stesso codice ovunque, & Spesso utilizzo i taccuini per la prototipazione rapida, quindi è improbabile che suggerimenti che coinvolgono l'hacking di percorsi assoluti siano utili.
Edit: Questo è diverso da Relative imports in Python 3, che parla di importazioni relative a Python 3 in generale e - in particolare - esecuzione di uno script all'interno di una directory del pacchetto. Questo ha a che fare con il lavoro all'interno di un taccuino jupyter che tenta di chiamare una funzione in un modulo locale in un'altra directory che ha sia diversi aspetti generali che particolari.
c'è qualche 'file __init__' nella directory pacchetto? –
Sì, nella directory 'lib'. – mpacer
Per favore, menzionalo nella struttura della tua directory nella tua domanda –