Eu tenho uma estrutura de diretório semelhante à seguinte
meta_project
project1
__init__.py
lib
module.py
__init__.py
notebook_folder
notebook.jpynb
Ao trabalhar em notebook.jpynbse tento usar uma importação relativa para acessar uma função function()em module.pycom:
from ..project1.lib.module import function
Estou tendo o erro a seguir:
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
Existe alguma maneira de fazer isso funcionar usando importações relativas?
Observe que o servidor do notebook é instanciado no nível do meta_projectdiretório, portanto, ele deve ter acesso às informações nesses arquivos.
Observe, também, que pelo menos como originalmente pretendido, project1não foi pensado como um módulo e, portanto, não tem um __init__.pyarquivo, mas sim um diretório do sistema de arquivos. Se a solução para o problema requer tratá-lo como um módulo e incluir um __init__.pyarquivo (mesmo um em branco), tudo bem, mas fazer isso não é o suficiente para resolver o problema.
Eu compartilho este diretório entre máquinas e importações relativas me permitem usar o mesmo código em todos os lugares, e eu freqüentemente uso notebooks para prototipagem rápida, então sugestões que envolvem hackear caminhos absolutos provavelmente não serão úteis.
Editar: isso é diferente das importações relativas em Python 3 , que fala sobre importações relativas em Python 3 em geral e - em particular - a execução de um script de dentro de um diretório de pacote. Isso tem a ver com trabalhar dentro de um bloco de notas jupyter tentando chamar uma função em um módulo local em outro diretório que tem aspectos gerais e particulares diferentes.
libdiretório.
__init__arquivo no diretório do seu pacote?