当前位置:网站首页>Call (import) in Jupiter notebook ipynb . Py file

Call (import) in Jupiter notebook ipynb . Py file

2022-07-08 01:24:00 Bosong

Catalog

1. call XX.py file

2. call XX.ipynb file

2.1 direct method

2.2 indirect method

(1) preservation XX.ipynb file

(2) establish Ipynb_importer.py file

(3) Where the main function is created .ipynb file


In order to ensure the simplicity and good scalability of the code , Instead of a file filled with hundreds of lines of code, I moved myself , It's better to divide the detachable part into several documents for later understanding by yourself and others .

1. call XX.py file

Guarantee XX.py Files and operation files are in one directory , Then in the operation file import XX( perhaps from XX import *), Then call XX Functions you need in func Or class class——XX.func()( perhaps func()).

2. call XX.ipynb file

2.1 direct method

hold XX.ipynb Derivation .py file (File– download as– Python(.py)), reference 1. Medium method , call .

Applicable conditions : call 1 individual or No more than 3 individual .ipynb file

2.2 indirect method

(1) preservation XX.ipynb file

(2) establish Ipynb_importer.py file

The code is as follows :

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

#  The main class 
class NotebookFinder(object):
    """Module finder that locates Jupyter Notebooks"""
    
    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]

def find_notebook(fullname, path=None):
    """find a notebook, given its fully qualified name and an optional path
     This turns "foo.bar" into "foo/bar.ipynb"
     and tries turning "Foo_Bar" into "Foo Bar" if Foo_Bar does not exist."""

    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
    # let import Notebook_Name find "Notebook Name.ipynb"
    nb_path = nb_path.replace("_", " ")
    if os.path.isfile(nb_path):
        return nb_path

class NotebookLoader(object):
    """Module Loader for Jupyter Notebooks"""

    def __init__(self, path=None):
        self.shell = InteractiveShell.instance()
        self.path = path
    
    def load_module(self, fullname):
        """import a notebook as a module"""
    
        path = find_notebook(fullname, self.path)
        print ("importing Jupyter notebook from %s" % path)
        # load the notebook object
        with io.open(path, 'r', encoding='utf-8') as f:
            nb = read(f, 4)

        # create the module and add it to sys.modules
        # if name in sys.modules:
        # return sys.modules[name]
        mod = types.ModuleType(fullname)
        mod.__file__ = path
        mod.__loader__ = self
        mod.__dict__['get_ipython'] = get_ipython
        sys.modules[fullname] = mod

        # extra work to ensure that magics that would affect the user_ns
        # actually affect the notebook module's ns
        save_user_ns = self.shell.user_ns
        self.shell.user_ns = mod.__dict__

        try:
            for cell in nb.cells:
                if cell.cell_type == 'code':
                    # transform the input to executable Python
                    code = self.shell.input_transformer_manager.transform_cell(cell.source)
                    # run the code in themodule
                    exec(code, mod.__dict__)
        finally:
            self.shell.user_ns = save_user_ns
        return mod

#  Call the main function 
sys.meta_path.append(NotebookFinder())

Just put it in our working directory Ipynb_importer.py file , You can call all jupyter notebook file .

The essence of this method is to use a jupyter notenook The parser checks .ipynb File parsing , Load each module in the file into memory for others python A file called .

(3) Where the main function is created .ipynb file

import Ipynb_importer
 
from XX import *

Applicable conditions : Call multiple .ipynb file

 

.ipynb It still takes some trouble to call files of the same type , But now that I have chosen TA, Mostly for TA Don't you think it's better to spend some time TA Love >_<

Ha ha ha , Finish the above sentence , Suddenly realize that today is also Valentine's day —— Take care of what you love , Accompany your loved ones , May everyone find that TA, Happy Valentine's Day **ヽ(°▽°)ノ*

 
原网站

版权声明
本文为[Bosong]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/02/202202130542272012.html