Comment importer NoteBook en tant que module dans Jupyter (IPython)

Comment utiliser une autre fonction de notebook avec Jupyter notebook est également présenté sur le site officiel et Qiita, mais je vais vous montrer comment le rendre un peu plus pratique.

C'est fondamentalement le même que le site officiel. https://jupyter-notebook.readthedocs.io/en/latest/examples/Notebook/Importing%20Notebooks.html

Qiita a également un bon article d'introduction. https://qiita.com/tdual/items/32d3918b4c8dd1f703e7

Cependant, la difficulté est que tout le contenu du notebook est exécuté lors de l'importation. Je souhaite utiliser uniquement les variables et fonctions définies dans certaines cellules au lieu de toutes les cellules d'autres blocs-notes! Dans [nbdev] de fastai (https://github.com/fastai/nbdev), dans un tel cas, marquez "#export" au début de la cellule. Mais je ne veux pas exagérer comme nbdev.

Donc, modifiez la classe NotebookLoader du programme sur le site officiel afin que seules les cellules marquées "#export" au début soient importées.

import io, os, sys, types
from IPython import get_ipython
from nbformat import read
from IPython.core.interactiveshell import InteractiveShell

def find_notebook(fullname, path=None):
    name = fullname.rsplit('.', 1)[-1]
    if not path:
        path = ['']
    for d in path:
        nb_path = os.path.join(d, name + ".ipynb")
        if os.path.isfile(nb_path):
            return nb_path
        nb_path = nb_path.replace("_", " ")
        if os.path.isfile(nb_path):
            return nb_path

class NotebookLoader(object):
    def __init__(self, path=None):
        self.shell = InteractiveShell.instance()
        self.path = path

    def load_module(self, fullname):
        path = find_notebook(fullname, self.path)
        with io.open(path, 'r', encoding='utf-8') as f:
            nb = read(f, 4)
        mod = types.ModuleType(fullname)
        mod.__file__ = path
        mod.__loader__ = self
        mod.__dict__['get_ipython'] = get_ipython
        sys.modules[fullname] = mod
        save_user_ns = self.shell.user_ns
        self.shell.user_ns = mod.__dict__
        try:
          for cell in nb.cells:
            if cell.cell_type == 'code':
                code = self.shell.input_transformer_manager.transform_cell(cell.source)
                #Au début de la cellule"#export"Exécutez uniquement la cellule décrite comme
                if code.startswith("#export"):
                    exec(code, mod.__dict__)
        except Exception as ex:
            #Dans la cellule"#export"J'oublie souvent d'ajouter, alors faites-moi savoir où l'erreur s'est produite
            print(code)
            raise ex
        finally:
            self.shell.user_ns = save_user_ns
        return mod

class NotebookFinder(object):
    def __init__(self):
        self.loaders = {}

    def find_module(self, fullname, path=None):
        nb_path = find_notebook(fullname, path)
        if not nb_path:
            return
        key = path
        if path:
            # lists aren't hashable
            key = os.path.sep.join(path)
        if key not in self.loaders:
            self.loaders[key] = NotebookLoader(path)
        return self.loaders[key]

Enregistrez-le sous un nom de fichier tel que nb_finder.py. Lors de l'utilisation

import sys
import nb_finder as nbf
sys.meta_path.append(nbf.NotebookFinder())

Ensuite, vous pouvez importer d'autres blocs-notes après cela.

from mynotebook import *

Dans le bloc-notes source d'importation, ajoutez «#export» au début de la cellule qui décrit les variables et les fonctions que vous souhaitez utiliser dans d'autres blocs-notes. N'oubliez pas d'ajouter #export à la cellule contenant l'instruction d'importation nécessaire pour exécuter cette cellule. Vous pouvez également spécifier #hide pour une cellule indésirable au lieu de #export pour empêcher cette cellule d'être importée.

Recommended Posts

Comment importer NoteBook en tant que module dans Jupyter (IPython)
Comment importer NoteBook en tant que module dans Jupyter (IPython)
Comment exécuter des commandes avec Jupyter Notebook
Comment faire revivre des cellules dans le notebook iPython
Comment résoudre ModuleNotFoundError: aucun module nommé XXX dans Jupyter Notebook
Comment déboguer avec Jupyter ou iPython Notebook
Comment utiliser IPython Notebook
Comment utiliser Jupyter Notebook
Comment afficher DataFrame sous forme de tableau dans Markdown
Un mémorandum expliquant comment exécuter la commande magique! Sudo dans Jupyter Notebook
Publier Jupyter Notebook en tant que billet de blog
Comment importer des fichiers où vous le souhaitez en Python
Comment obtenir stacktrace en python
Pour importer votre propre module avec jupyter
Comment utiliser le notebook Jupyter avec ABCI
Jupyter Notebook Principes d'utilisation
Comment utiliser le bloc-notes Jupyter [super basique]
[Petite histoire] Comment enregistrer des graphiques matplotlib dans un lot avec Jupyter
Comment corriger un bug qui empêche le notebook Jupyter de démarrer automatiquement
Comment installer le package python dans un environnement local en tant qu'utilisateur général
Comment configurer un notebook Jupyter à la destination SSH (AWS EC2)
Comment masquer les avertissements qui n'affectent pas l'exécution dans Jupyter Notebook
Comment effacer un taple dans une liste (Python)
Comment incorporer des variables dans des chaînes python
Comment créer un fichier JSON en Python
Comment implémenter un sélecteur de dégradé dans Houdini
Comment ajouter un chemin de recherche de module Python
Pour ajouter un module à python que vous mettez dans Julialang
[Python] Comment dessiner un histogramme avec Matplotlib
Comment créer une API Rest dans Django
Comment écrire un document tuple nommé en 2020
Comment compter les nombres dans une plage spécifique
Comment désinstaller un module installé à l'aide de setup.py
Comment lire des fichiers dans différents répertoires
Comment se moquer d'une fonction publique dans Pytest
Pour générer une valeur au milieu d'une cellule avec Jupyter Notebook
[Linux] [module noyau] Comment passer des paramètres comme arguments lors du chargement d'un module noyau chargeable
Que faire lorsque le graphique n'apparaît pas sur le notebook Jupyter (IPython)
Que faire si NotADirectoryError: [Errno 20] Pas un répertoire: 'xdg-settings' apparaît dans le notebook jupyter
Créez un environnement PYNQ sur Ultra96 V2 et connectez-vous à Jupyter Notebook
Comment rendre la largeur de police du notebook jupyter mis dans pyenv égale
Comment utiliser IPython
Comment spécifier un schéma dans les paramètres de la base de données Django
Comment convertir / restaurer une chaîne avec [] en python
Comment exécuter le module Ansible ajouté dans Ansible Tower
Essayez de créer un module Python en langage C
[Python] Comment développer des variables dans une chaîne de caractères
Un mémorandum sur l'utilisation de keras.preprocessing.image de Keras
Comment organiser un séminaire pratique à l'aide de Jupyter à l'aide de Docker
Dessiner une structure arborescente avec D3.js dans Jupyter Notebook
Un moyen simple de créer un module d'importation avec jupyter
Comment lancer instantanément Jupyter Notebook à partir du terminal
Comment résoudre les erreurs de module SSL dans l'environnement Anaconda
Comment (forcer) PDF les diapositives d'un notebook IPython
Comment exécuter une commande à l'aide d'un sous-processus en Python
Comment référencer des fichiers statiques dans un projet Django
Comment afficher la barre de progression sur Jupyter Notebook pour voir la progression
[Linux] Comment mettre votre IP dans une variable
Comment créer rapidement un environnement d'apprentissage automatique à l'aide de Jupyter Notebook avec UbuntuServer 16.04 LTS