我有一个类似于以下内容的目录结构
meta_project
project1
__init__.py
lib
module.py
__init__.py
notebook_folder
notebook.jpynb
当在工作notebook.jpynb
,如果我尝试使用相对导入来访问函数function()
在module.py
有:
from ..project1.lib.module import function
我收到以下错误:
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
有什么办法可以使用相对导入来使它起作用?
注意,笔记本服务器是在meta_project
目录级别实例化的,因此它应该有权访问这些文件中的信息。
同样要注意的是,至少没有按照最初的意图project1
被认为是模块,因此没有__init__.py
文件,它只是作为文件系统目录。如果解决问题的方法需要将其视为模块,并包括一个__init__.py
很好的文件(甚至是空白文件),但这样做还不足以解决问题。
我在机器之间共享此目录,相对的导入使我可以在任何地方使用相同的代码,而且我经常使用笔记本进行快速原型制作,因此涉及将绝对路径捆绑在一起的建议不太可能有帮助。
编辑:这与Python 3中的相对导入不同,后者相对于Python 3中的相对导入一般来说,尤其是从包目录中运行脚本。这与在jupyter笔记本中工作有关,该笔记本试图调用另一个目录中具有不同常规和特定方面的本地模块中的函数。
lib
目录中。
__init__
软件包目录中是否有文件?