将自定义模块导入Jupyter Notebook

iva*_*ler 9 python import jupyter-notebook

是的,我知道这是一个经常性的问题,但我仍然找不到令人信服的答案。我什至在https://chrisyeh96.github.io/2017/08/08/definitive-guide-python-imports.html上阅读,但找不到解决方法:

我正在运行包含jupyter(ipython)笔记本的python 3.6项目。我希望笔记本电脑导入一个自定义的本地helpers.py程序包,以后我可能还会在其他来源中使用它。

项目结构类似于:

my_project/
?
??? my_project/
?   ??? notebooks/
?       ??? a_notebook.ipynb
?   ??? __init__.py     # suppose to make package `my_project` importable
?   ??? helpers.py
?
??? tests/
?   ??? helpers_tests.py
?
??? .gitignore
??? LICENSE
??? README.md
??? requirements.txt
??? setup.py
Run Code Online (Sandbox Code Playgroud)

导入helpers笔记本时出现错误:

----> 4 import helpers

ModuleNotFoundError: No module named 'helpers'
Run Code Online (Sandbox Code Playgroud)

我也尝试过from my_project import helpers并且得到相同的错误ModuleNotFoundError: No module named 'my_project'

我终于(并暂时)使用了通常的技巧:

import sys
sys.path.append('..')
import helpers
Run Code Online (Sandbox Code Playgroud)

但它看起来很糟糕,我仍在寻找更好的解决方案

Tar*_*nin 8

可以通过告诉python在哪里寻找模块sys.path。我有一个这样的项目结构:

project/
    ?
    ??? src/
    ?    ??? my_module/
    ?        ??? __init__.py       
    ?        ??? helpers.py
    ??? notebooks/
    ?   ??? a_notebook.ipynb
    ...
Run Code Online (Sandbox Code Playgroud)

我能够像这样加载模块:

project/
    ?
    ??? src/
    ?    ??? my_module/
    ?        ??? __init__.py       
    ?        ??? helpers.py
    ??? notebooks/
    ?   ??? a_notebook.ipynb
    ...
Run Code Online (Sandbox Code Playgroud)

一个人应该可以从任何地方加载模块。


Cla*_*nor 0

我认为您需要目录__init__.py中的模块notebooks/。我之前没有真正使用过 Jupyter 笔记本,所以我可能是错的。您可能还需要尝试将导入语句更改为:

import .. helpers
Run Code Online (Sandbox Code Playgroud)

指示导入语句适用于位于 Jupyter Notebook 父目录中的本地包。