我有一个类似于以下的目录结构
meta_project
project1
__init__.py
lib
module.py
__init__.py
notebook_folder
notebook.jpynb
Run Code Online (Sandbox Code Playgroud)
当notebook.jpynb
我尝试使用相对导入来访问函数function()
时module.py
使用:
from ..project1.lib.module import function
Run Code Online (Sandbox Code Playgroud)
我收到以下错误
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
Run Code Online (Sandbox Code Playgroud)
有没有办法让这个使用相对导入工作?
请注意,笔记本服务器在meta_project
目录级别实例化,因此它应该可以访问这些文件中的信息.
另请注意,至少与最初的预期project1
并未被视为模块,因此没有__init__.py
文件,它只是作为文件系统目录.如果问题的解决方案需要将其视为一个模块并包含一个__init__.py
文件(即使是空白文件),那么这样做是不错的,但这样做不足以解决问题.
我在机器和相对导入之间共享这个目录允许我在任何地方使用相同的代码,并且我经常使用笔记本进行快速原型设计,因此涉及黑客攻击绝对路径的建议不太可能有用.
编辑:这与Python 3中的相对导入不同,Python 3通常讨论Python 3中的相对导入,特别是从包目录中运行脚本.这与在jupyter笔记本中工作有关,该笔记本试图在另一个具有不同的一般和特定方面的目录中的本地模块中调用函数.