web-dev-qa-db-fra.com

Importer un module personnalisé dans le cahier jupyter

Oui, je sais que c'est une question récurrente mais je n'ai toujours pas trouvé de réponse convaincante. J'ai même lu sur https://chrisyeh96.github.io/2017/08/08/definitive-guide-python-imports.html mais je n'ai pas trouvé comment résoudre le problème:

J'exécute un projet python 3.6 qui inclut des blocs-notes jupyter (ipython). Je veux que le bloc-notes importe un _ helpers.py package que j'utiliserai probablement plus tard dans d'autres sources.

La structure du projet est similaire à:

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

Lors de l'importation de helpers dans le bloc-notes, j'obtiens l'erreur:

----> 4 import helpers

ModuleNotFoundError: No module named 'helpers'

J'ai aussi essayé from my_project import helpers et j'obtiens la même erreur ModuleNotFoundError: No module named 'my_project'

J'ai finalement (et temporairement) utilisé l'astuce habituelle:

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

Mais ça a l'air horrible et je cherche toujours une meilleure solution

9
ivankeller

On peut dire python où chercher les modules via sys.path. J'ai une structure de projet comme celle-ci:

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

J'ai pu charger le module comme ceci:

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

from my_module import helpers

Il faut pouvoir charger le module où qu'il se trouve.

8
Taras Alenin

Si vous déplacez le répertoire notebooks d'un niveau, puis importez explicitement votre module à partir du package, cela devrait le faire. Ainsi, votre répertoire ressemblerait à ceci:

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

puis votre déclaration d'importation dans le bloc-notes serait:

from my_project import helpers.

1
lauren.marietta

Je pense que vous avez besoin d'un __init__.py module dans le notebooks/ répertoire. Je n'ai pas vraiment utilisé de cahiers Jupyter auparavant, donc je peux me tromper. Vous devrez peut-être également essayer de modifier votre instruction d'importation pour:

import .. helpers

pour indiquer que l'instruction d'importation concerne un package local situé dans le répertoire parent du bloc-notes Jupyter.

0
Clay Raynor

Ici, j'ai pu trouver plusieurs solutions. Certains d'entre eux sont similaires à ceux auxquels nous avons déjà répondu: https://mg.readthedocs.io/importing-local-python-modules-from-jupyter-notebooks/index.html

0
ivankeller

Essayez la ligne suivante:

from my_project.helpers import what_you_need

Cette ligne devrait également fonctionner:

import my_project.helpers

0
wingedRuslan