Comment importer un module dans le répertoire des notebook de jupyter dans les notebooks des répertoires inférieurs? [dupliquer]

Cette question a déjà une réponse ici:

j'ai utilisé le carnet jupyter pour l'analyse des données depuis un certain temps. Je voudrais développer un module dans mon répertoire de carnet jupyter et être pouvoir importer ce nouveau module dans les cahiers. Mon jupyter fichier notebook répertoire 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'essaie la même commande dans notebook2.ipynb j'ai le ImportError: No module named 'new_module'. Les deux solutions évidentes sont A) déplacer new_module dans le répertoire currentnotebooks ou B) déplacer notebook2.ipynb au même niveau que new_module. Je ne veux pas déconner avec la structure du fichier. Est-ce possible?

16
demandé sur Thomas K 2016-09-02 22:54:43

1 réponses

Vous devez vous assurer que le répertoire parent de new_module est sur votre chemin python. Pour un carnet qui est un niveau en dessous de 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 nb_dir est réglé, mais c'est tout. Vous devez vous exécuter ce code pour un ordinateur portable dans Jupyter notebooks, puisqu'il ajouterait le parent de ce répertoire au chemin python, qui est probablement indésirable.

la raison pour laquelle l'importation fonctionne notebook1 c'est que sys.chemin d'accès contient des '' (la chaîne vide), qui est le répertoire courant de l'interpréteur en cours d'exécution (noyau, dans ce cas). Une recherche google explain python path trouve plusieurs bonnes explications sur l'utilisation de python PYTHONPATH(alias sys.path).

26
répondu cco 2017-03-06 14:42:04