web-dev-qa-db-ja.com

カスタムモジュールをJupyterノートブックにインポートする

はい、これは繰り返し起こる質問であることは知っていますが、納得のいく答えが見つかりませんでした。私も https://chrisyeh96.github.io/2017/08/08/definitive-guide-python-imports.html を読みましたが、問題を解決する方法を見つけることができませんでした:

python 3.6 jupyter(ipython)ノートブックを含むプロジェクト。ノートブックにカスタムローカル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

しかし、それはひどく見え、私はまだより良い解決策を探しています

9
ivankeller

pythonにsys.path経由でモジュールを探す場所を伝えることができます。私はこのようなプロジェクト構造を持っています:

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

次のようにモジュールをロードできました。

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

from my_module import helpers

どこにいてもモジュールをロードできるはずです。

8
Taras Alenin

notebooksディレクトリを1レベル外に移動し、パッケージからモジュールを明示的にインポートする場合は、それを行う必要があります。したがって、ディレクトリは次のようになります。

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

そして、ノートブック内のインポート文は次のようになります。

from my_project import helpers

1
lauren.marietta

__init__.pyディレクトリにnotebooks/モジュールが必要だと思います。 Jupyterノートブックを実際に使用したことがないので、間違っている可能性があります。インポートステートメントを次のように変更する必要がある場合もあります。

import .. helpers

importステートメントがJupyterノートブックの親ディレクトリにあるローカルパッケージ用であることを示します。

0
Clay Raynor

ここでいくつかの解決策を見つけることができました。それらのいくつかは前に答えたものに似ています: https://mg.readthedocs.io/importing-local-python-modules-from-jupyter-notebooks/index.html

0
ivankeller

次の行を試してください。

from my_project.helpers import what_you_need

この行も機能するはずです:

import my_project.helpers

0
wingedRuslan