将自定义模块导入Jupyter Notebook

时间:2018-10-29 15:49:54

标签: 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

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

----> 4 import helpers

ModuleNotFoundError: No module named 'helpers'

我也尝试了from my_project import helpers,但遇到了相同的错误ModuleNotFoundError: No module named 'my_project'

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

import sys
sys.path.append('..')
import helpers

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

7 个答案:

答案 0 :(得分:1)

如果将notebooks目录移出一级,然后从包中显式导入模块,则应该这样做。因此您的目录如下所示:

my_project/
│
├── my_project/
│   ├── __init__.py       
│   └── helpers.py
├── notebooks/
│   └── a_notebook.ipynb
...

,然后您在笔记本中的导入语句将为:

from my_project import helpers

答案 1 :(得分:1)

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

project/
    │
    ├── src/
    │    └── my_module/
    │        ├── __init__.py       
    │        └── helpers.py
    ├── notebooks/
    │   └── a_notebook.ipynb
    ...

我能够像这样加载模块:

import sys
sys.path.append('../src/')

from my_module import helpers

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

答案 2 :(得分:1)

在这里我可以找到几种解决方案。其中一些与之前回答的类似: https://mg.readthedocs.io/importing-local-python-modules-from-jupyter-notebooks/index.html

答案 3 :(得分:0)

我认为您需要const safeMathPath = path.resolve(__dirname, "contracts", "math", "SafeMath.sol"); 目录中的__init__.py模块。我之前从未真正使用过Jupyter笔记本,所以我可能会错。您可能还需要尝试将导入语句更改为:

notebooks/

表示import语句适用于Jupyter笔记本的父目录中的本地包。

答案 4 :(得分:0)

尝试以下行:

from my_project.helpers import what_you_need

此行也应该起作用:

import my_project.helpers

答案 5 :(得分:0)

这对我有用。

import sys

MODULE_FULL_PATH = '/<home>/<username>/my_project/my_project'

sys.path.insert(1, MODULE_FULL_PATH)

from my_module import helpers

答案 6 :(得分:0)

如果您使用的是Unix / Linux系统,则另一个优雅的解决方案可能是创建指向您要使用的模块文件helpers.py的“软链接”。转到notebooks目录,并通过以下方式创建指向模块文件的链接:

cd notebooks; ln -fs ../my_project/helpers.py .

此“软链接”实质上是指向原始目标文件的指针(快捷方式)。通过链接,您将照常导入模块文件:

import helpers