Hi I have a couple of python functions defined in one notebook that I would like to reuse in another. I found the following direction.
http://jupyter-notebook.readthedocs.io/en/latest/examples/Notebook/Importing %20Notebooks.html https://github.com/jupyter/notebook/blob/master/docs/source/examples/Noteboo k/Importing%20Notebooks.ipynb My challenge is I have a lot of cells that define straight python code. These cells often load large data files and are very slow. Ideally I would like to to only import functions. It looks like the heavy lifting is done by NotebookLoader() bellow. Maybe there is a clever way to only execute function definitions? Is there a way to get the abstract syntax tree for the code in a cell and pick out the function definitions? As a newbie my hack would be to require functions be defined in their own cell. Next before execute check the cell code for lines beginning with Œdef' 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 P.s. I found Importing%20Notebooks.html <http://jupyter-notebook.readthedocs.io/en/latest/examples/Notebook/Importin g%20Notebooks.html> hard to use. It might be easier of the code as split out and this notebook and put in the standard distribution of jupyter. ³how to import notebooks.ipynb² then becomes 2 lines Import importNotebookHelper Import myNotebook Kind regards Andy -- You received this message because you are subscribed to the Google Groups "Project Jupyter" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/jupyter/D51565AA.571A2%25Andy%40SantaCruzIntegration.com. For more options, visit https://groups.google.com/d/optout.
