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.jpynbse provo a utilizzare un'importazione relativa per accedere a una funzione function()in module.pycon:
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_projectdirectory, quindi dovrebbe avere accesso alle informazioni in quei file.
Si noti, inoltre, che almeno come originariamente previsto project1non è stato pensato come un modulo e quindi non ha un __init__.pyfile, è stato semplicemente inteso come una directory del file system. Se la soluzione al problema richiede di trattarlo come un modulo e includere un __init__.pyfile (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.
libdirectory.
__init__file nella directory del pacchetto?