如何使用 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'
这是因为相对导入只适用于包,如果您需要作为包使用,您需要添加包所在的路径。
在这里看了很多答案后,我仍然不明白如何使用导入构建一个 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'
这是因为相对导入只适用于包,如果您需要作为包使用,您需要添加包所在的路径。