Tengo una estructura de directorio similar a la siguiente
meta_project
project1
__init__.py
lib
module.py
__init__.py
notebook_folder
notebook.jpynb
Cuando se trabaja en notebook.jpynb
si trato de usar una importación relativa a acceder a una función function()
en module.py
la:
from ..project1.lib.module import function
Obtuve el siguiente error:
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
¿Hay alguna forma de hacer que esto funcione usando importaciones relativas?
Tenga en cuenta que se crea una instancia del servidor del cuaderno en el nivel del meta_project
directorio, por lo que debería tener acceso a la información de esos archivos.
Tenga en cuenta también que, al menos como se pretendía originalmente, project1
no se pensó en un módulo y, por lo tanto, no tiene un __init__.py
archivo, solo se pensó como un directorio del sistema de archivos. Si la solución al problema requiere tratarlo como un módulo e incluir un __init__.py
archivo (incluso uno en blanco) está bien, pero hacerlo no es suficiente para resolver el problema.
Comparto este directorio entre máquinas y las importaciones relativas me permiten usar el mismo código en todas partes y, a menudo, utilizo cuadernos para la creación rápida de prototipos, por lo que es poco probable que las sugerencias que impliquen piratear rutas absolutas juntas sean útiles.
Editar: Esto es diferente a las importaciones relativas en Python 3 , que habla de las importaciones relativas en Python 3 en general y, en particular, de ejecutar un script desde el directorio de un paquete. Esto tiene que ver con trabajar dentro de un cuaderno jupyter tratando de llamar a una función en un módulo local en otro directorio que tiene aspectos generales y particulares diferentes.
lib
directorio.
__init__
archivos en el directorio de su paquete?