繁体   English   中英

将自定义模块导入 jupyter notebook

[英]Importing custom module into 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

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

可以通过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

人们应该能够从他们拥有的任何地方加载模块。

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

如果您将notebooks目录移出一级,然后从包中明确导入您的模块,则应该这样做。 所以你的目录看起来像这样:

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

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

from my_project import helpers

尝试以下行:

from my_project.helpers import what_you_need

这一行也应该有效:

import my_project.helpers

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

import .. helpers

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

除了@ Taras-Alenin的答案,

对于那些开发自己的模块并将这些模块导入其笔记本的用户,建议您重新启动内核。 否则笔记本将无法捕获模块的更新

这对我有用。

import sys

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

sys.path.insert(1, MODULE_FULL_PATH)

from my_module import helpers

如果您在 Unix/Linux 系统上,另一个优雅的解决方案可能是创建一个“软链接”到您想要使用的模块文件helpers.py 切换到notebooks目录并以这种方式创建指向模块文件的链接:

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

这个“软链接”本质上是指向原始目标文件的指针(快捷方式)。 链接到位后,您将像往常一样导入模块文件:

import helpers

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM