1

在很多答案在这里寻找后,我仍然不知道如何结构,进口Python项目...如何用ipython笔记本构建python项目?

比方说,我的目录结构是

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

现在我导入工具1从create_bla_dataset.py与

# 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 
文件

但现在我想导入create_bla_dataset内mynote.ipynb同时用jupyter笔记本打开mynote.ipynb,但我不知道如何...

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

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

回答

2

当您使用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' 

这是因为相对于进口只在包装工作,如果你需要的包中使用您需要添加哪里是包的路径。

+0

我尝试从各个位置启动jupyter笔记本,但没有运气:( – djma

+0

您需要从myproject启动仪表板。您是否可以从公共URL中分享一个最小示例? – cosmoscalibur

+0

我也尝试从'myproject'启动...你是什​​么意思,从一个公共URL分享?谢谢! – djma