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.jpynb
se tento usar uma importação relativa para acessar uma função function()
em module.py
com:
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_project
diretório, portanto, ele deve ter acesso às informações nesses arquivos.
Observe, também, que pelo menos como originalmente pretendido, project1
não foi pensado como um módulo e, portanto, não tem um __init__.py
arquivo, 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__.py
arquivo (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.
lib
diretório.
__init__
arquivo no diretório do seu pacote?