Search code examples
pythonimportworkflowipython

Importing an ipynb file from another ipynb file?


Interactive Python (ipython) is simply amazing, especially as you are piecing things together on the fly... and does it in such a way that it is easy to go back.

However, what seems to be interesting is the use-case of having multiple ipython notebooks (ipynb files). It apparently seems like a notebook is NOT supposed to have a relationship with other notebooks, which makes sense, except that I would love to import other ipynb files.

The only workaround I see is converting my *.ipynb files into *.py files, which then can be imported into my notebook. Having one file hold everything in a project is a bit weird, especially if I want to really push for code-reuse (isn't that a core tenet of python?).

Am I missing something? Is this not a supported use case of ipython notebooks? Is there another solution I can be using for this import of an ipynb file into another notebook? I'd love to continue to use ipynb, but it's really messing up my workflow right now :(


Solution

  • Run

    !pip install ipynb

    and then import the other notebook as

    from ipynb.fs.full.<notebook_name> import *

    or

    from ipynb.fs.full.<notebook_name> import <function_name>

    Make sure that all the notebooks are in the same directory.

    Edit 1: You can see the official documentation here - https://ipynb.readthedocs.io/en/stable/

    Also, if you would like to import only class & function definitions from a notebook (and not the top level statements), you can use ipynb.fs.defs instead of ipynb.fs.full. Full uppercase variable assignment will get evaluated as well.