我有一个类似于下面的目录结构
meta_project
project1
__init__.py
lib
module.py
__init__.py
notebook_folder
notebook.jpynb
在notebook.jpynb
中工作时,如果我尝试使用相对导入来访问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
文件(甚至是一个空白的文件),这是很好的,但是这样做并不足以解决问题。
我在机器和相关导入之间共享这个目录,允许我在任何地方使用相同的代码&我经常使用笔记本进行快速原型化,因此,涉及将绝对路径合并在一起的建议不太可能有帮助。
编辑:这与Python 3中的相对导入不同,后者一般讨论Python3中的相对导入,特别是在包目录中运行脚本。这与在jupyter笔记本中工作有关,它试图调用另一个目录中的本地模块中的函数,该函数具有不同的一般和特殊方面。
发布于 2022-10-05 00:07:58
如果您正在使用VS代码中的木星扩展,我发现您现在可以在您的settings.json
文件中设置这个路径。
{
"jupyter.notebookFileRoot": "/path/to/your/module/root"
}
编辑:或者,在您的工作区根目录中更通用地设置它:
{
"jupyter.notebookFileRoot": "${workspaceFolder}"
}
https://stackoverflow.com/questions/34478398
复制相似问题