Ho una struttura di directory simile alla seguente
meta_project
project1
__init__.py
lib
module.py
__init__.py
notebook_folder
notebook.jpynb
Quando lavoro notebook.jpynb
se provo a utilizzare un'importazione relativa per accedere a 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?
Si noti che il server notebook viene istanziato a livello di meta_project
directory, quindi dovrebbe avere accesso alle informazioni in quei file.
Si noti, inoltre, che almeno come originariamente previsto project1
non è stato pensato come un modulo e quindi non ha un __init__.py
file, è stato semplicemente inteso come una directory del file system. Se la soluzione al problema richiede di trattarlo come un modulo e includere un __init__.py
file (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, e spesso uso i notebook per la prototipazione rapida, quindi è improbabile che i suggerimenti che coinvolgono l'hacking di percorsi assoluti siano utili.
Modifica: questo è diverso dalle importazioni relative in Python 3 , che parla delle importazioni relative in Python 3 in generale e, in particolare, dell'esecuzione di uno script da una directory del pacchetto. Questo ha a che fare con il lavoro all'interno di un notebook jupyter cercando di chiamare una funzione in un modulo locale in un'altra directory che ha aspetti sia generali che particolari.
lib
directory.
__init__
file nella directory del pacchetto?