[英]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.