使用Python 3从Jupyter Notebook中相对导入的另一个目录中的模块导入本地函数

mpacer:

我有一个类似于以下内容的目录结构

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笔记本中工作有关,该笔记本试图在另一个目录中具有不同常规和特定方面的本地模块中调用函数。

metakermit:

此笔记本中,我有一个与您几乎相同的示例,在我想以DRY方式说明相邻模块功能的用法。

我的解决方案是通过向笔记本添加如下代码段来告诉Python该额外的模块导入路径:

import os
import sys
module_path = os.path.abspath(os.path.join('..'))
if module_path not in sys.path:
    sys.path.append(module_path)

这使您可以从模块层次结构中导入所需的功能:

from project1.lib.module import function
# use the function normally
function(...)

请注意,如果还没有空__init__.py文件,则必须将它们添加project1 /lib /文件夹中。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从另一个Jupyter Notebook导入功能

在Python中,如何从未本地导入的另一个文件中修补功能?

无法在Jupyter Notebook中创建Python 3 Notebook

Python 3中的相对导入

在Jupyter Notebook的另一个目录中导入py文件

Python导入模块在另一个文件中

从Python中的另一个文件导入变量

使用从另一个导入中导入的模块

Python3将模块从文件夹导入到另一个文件夹

在python中,有关导入一个模块并导入另一个模块的问题?

将python模块导入另一个目录

如何导入和使用从自身中的另一个文件导入类的python模块?

另一个Python相对导入错误

从模块中导入函数的Python导入错误(ModuleNotFoundError),该模块从另一个模块中导入类

如何从Python中的另一个项目导入模块?

如何在不使用相对导入的情况下从另一个目录中的Python脚本执行文件(导入其他模块)?

如何从Python中的另一个导入函数调用globals()?

将Python模块导入Jupyter Notebook

如何使用@use从另一个目录导入包含变量的sass模块?

Python3-从用户目录导入Linux中的另一个Python文件

(Python)在一个模块中从__init__导入参数以在另一个模块中使用?

Python:如何通过循环导入在另一个文件中调用函数

Jupyter Notebook - Python 3 内核

如何从另一个目录导入具有相对路径的 Python 模块?

Python 3 模块从另一个文件夹导入错误

如何在JS中的另一个函数中导入和使用函数

使用 Jupyter notebook 在 python 中进行相对导入

如何在另一个文件目录中的另一个脚本中导入 Python 文件?

Python从另一个脚本中的函数导入变量