在 Jupyter notebook 中导入本地模块

Posted

技术标签:

【中文标题】在 Jupyter notebook 中导入本地模块【英文标题】:Import local modules in Jupyter notebook 【发布时间】:2021-10-04 22:19:13 【问题描述】:

我想外包一些对模块中的多个笔记本有用的通用功能(也用于测试目的)。当前目录结构如下所示

朱皮特/ ├─ 笔记本/ │ ├─ 01 笔记本 1.ipynb │ ├─ ... ├─ src/ │ ├─ module_a/ │ │ ├─ __init__.py │ │ ├─ func_a.py │ ├─ module_b/... ├─ 测试/... ├─ 数据/... ├─ .../

func_a.py中,有一个简单的函数def print_a(): print('a')

但是,当我想通过使用(我认为有意义的)在01 Notebook 1.ipynb 中导入和使用module_a

from .. src.module_a import print_a

我收到了ImportError: attempted relative import with no known parent package。我究竟做错了什么?我正在使用 Python 3.9。

【问题讨论】:

【参考方案1】:

我会尝试像这样append the src directory to the system path:

import sys
sys.path.append("/path/to/your/src")

from src.module_a import a

请注意,您可以使用笔记本根目录的相对路径,而不是上面示例中的绝对路径,如下所示:

sys.path.append("src")

应该也可以

【讨论】:

感谢您的建议。但这不是改变系统路径的可怕黑客和反模式吗? 系统路径不会永久更改(如果您删除sys.path.append,即使您运行它也不会工作),我不知道它是否被视为“黑客”,我认为它是合法的方式 添加到我的第一条评论中,系统路径的使用只发生在笔记本中,用于演示目的,而不是作为项目的核心组件

以上是关于在 Jupyter notebook 中导入本地模块的主要内容,如果未能解决你的问题,请参考以下文章

在 Jupyter Notebook 中导入 numpy 时出现问题

无法在 jupyter notebook 中导入 sparkdl

scikit-learn 没有在 jupyter notebook 中导入

为什么我不能在我的Jupyter Notebook(Python 3.6)中导入utils,尽管它已经安装了?

如何:在支持 GPU 的 Conda 中导入 Jupyter Notebook 中的 TensorFlow?

在 ipython/Jupyter notebook 中导入 scikit-learn