Hi Andy,

I would suggest to look at https://github.com/ipython/ipynb , which is
supposed to do what you want by walking the AST.
We need to polish it and advertise it more, feedback (and
contributions) would be welcome.
-- 
Matthias

On Thu, Apr 13, 2017 at 5:28 PM, Andy Davidson
<[email protected]> wrote:
> 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/Notebook/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 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.

-- 
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/CANJQusV8ybSpv-OEzO05dZV0yhsvMnj_%3D%2BU2Cm6bNU%3D19Q_PBA%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to