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
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.
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
.
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.
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
Essayez la ligne suivante:
from my_project.helpers import what_you_need
Cette ligne devrait également fonctionner:
import my_project.helpers