Импорт пользовательского модуля в блокнот jupyter - PullRequest
0 голосов
/ 29 октября 2018

Да, я знаю, что это повторяющийся вопрос, но я все еще не мог найти убедительный ответ. Я даже прочитал на 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

Но это выглядит ужасно, и я все еще ищу лучшее решение

Ответы [ 4 ]

0 голосов
/ 30 мая 2019

Попробуйте следующую строку:

from my_project.helpers import what_you_need

Эта строка также должна работать:

import my_project.helpers

0 голосов
/ 29 октября 2018

Если вы переместите каталог notebooks на один уровень, а затем явно импортируете свой модуль из пакета, это должно быть сделано. Итак, ваш каталог будет выглядеть так:

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

и тогда ваш оператор импорта в блокноте будет:

from my_project import helpers.

0 голосов
/ 11 апреля 2019

Можно указать 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

Нужно уметь загружать модуль откуда угодно.

0 голосов
/ 29 октября 2018

Я думаю, вам нужен модуль __init__.py в каталоге notebooks/. Я раньше не пользовался ноутбуками Jupyter, поэтому могу ошибаться. Вам также может понадобиться изменить утверждение импорта на:

import .. helpers

, чтобы указать, что оператор импорта предназначен для локального пакета, который находится в родительском каталоге записной книжки Jupyter.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...