我有一个类似于以下内容的目录 struct
meta_project
project1
__init__.py
lib
module.py
__init__.py
notebook_folder
notebook.jpynb
在notebook.jpynb
中工作时,如果我try 使用相对导入来访问module.py
中的函数function()
,请执行以下操作:
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
文件(甚至是一个空白文件),这很好,但这样做不足以解决问题.
我在机器之间共享这个目录,相对导入允许我在任何地方使用相同的代码,&;我经常使用笔记本进行快速原型制作,因此涉及将绝对路径拼凑在一起的建议不太可能有帮助.
编辑:这与Relative imports in Python 3不同,后者一般谈论Python3中的相对导入,尤其是从包目录中运行脚本.这与在jupyter笔记本中工作有关,该笔记本试图调用另一个目录中的本地模块中的函数,该目录既具有不同的一般方面,也具有不同的特定方面.