在 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,尽管它已经安装了?