如何使用 ipython 个笔记本构建一个 python 项目?

How to structure a python project with ipython notebooks?

在这里看了很多答案后,我仍然不明白如何使用导入构建一个 python 项目...

假设我的目录结构是

myproject
   utils
      tool1.py
   datasets
      create_bla_dataset.py
   research
      mynote.ipynb

现在我使用

从 create_bla_dataset.py 导入工具 1
# We are in create_bla_dataset.py 
from ..utils import tool1

... define how to create a dataset

if __name__ == "__main__":
  # demo the dataset

我可以 运行 文件

> cd <dir_contains_myproject>
> python -m myproject.datasets.create_bla_dataset

但现在我想在使用 jupyter notebook 打开 mynote.ipynb 时在 mynote.ipynb 中导入 create_bla_dataset,但我不知道如何...

如果我尝试 from ..datasets import create_bla_dataset,我会得到 ValueError: attempted relative import beyond top-level package

编辑:我尝试从各种目录启动 jupyter 笔记本,但没有成功,同样的错误。

当您使用 IPython/Jupyter 笔记本时,您需要考虑到 ipython 服务器只能看到从您启动笔记本实例的位置定义的根目录中的文件。在这种情况下,您可能直接启动笔记本文件而不是从项目根目录启动。

此外,您还可以使用 __init__.py 文件。

已更新:您可以在笔记本顶部添加一个单元格。

import sys, os
sys.path.insert(0, os.path.dirname(os.path.abspath('..')))

然后,myproject被识别为一个包,您可以按原样导入。

from myproject.datasets.create_bla_dataset import bar
bar()
>>> 'hi foo hi bar'

这是因为相对导入只适用于包,如果您需要作为包使用,您需要添加包所在的路径。