J'ai utilisé jupyter notebook pour l'analyse des données pendant un bon bout de temps. J'aimerais développer un module dans mon répertoire de cahiers jupyter et pouvoir importer ce nouveau module dans des cahiers. Le répertoire de fichiers de mon cahier jupyter peut être représenté comme suit:
Jupyter notebooks\
notebook1.ipynb
new_module\
__init__.py
newfunction.py
currentnotebooks\
notebook2.ipynb
Quand utiliser import new_module
dans notebook1.ipynb cela fonctionne cependant quand j'essaye la même commande dans notebook2.ipynb j'obtiens le suivant ImportError: No module named 'new_module'
. Les deux solutions évidentes sont A) déplacez new_module dans le répertoire currentnotebooks ou B) déplacez notebook2.ipynb jusqu'au même niveau que new_module. Je ne veux pas du tout gâcher la structure des fichiers. Est-ce possible?
Vous devez vous assurer que le répertoire parent de new_module
est sur votre chemin python. Pour un ordinateur portable dont le niveau est inférieur à new_module
, ce code fera l'affaire:
import os
import sys
nb_dir = os.path.split(os.getcwd())[0]
if nb_dir not in sys.path:
sys.path.append(nb_dir)
Si vous êtes plus bas dans la hiérarchie des répertoires, vous devrez ajuster la façon dont nb_dir
est réglé, mais c'est tout. Vous devriez pas exécuter ce code pour un cahier dans Jupyter notebooks
, car le parent de ce répertoire serait ajouté au chemin python), ce qui n’est probablement pas souhaitable.
La raison pour laquelle l'importation fonctionne pour notebook1
est-ce que sys.path contient ''
(la chaîne vide), qui est toujours le répertoire actuel de l'interpréteur en cours d'exécution (kernel, dans ce cas). Une recherche google pour explain python path
donne de bonnes explications sur la manière dont python utilise PYTHONPATH
(aka sys.path
).