Relative imports in Jupyter notebooks

How do we import a module from a .py or a .ipynb file into a Jupyter notebook from a different directory?
I wrote this post after answering a question on stackoverflow:
https://stackoverflow.com/questions/49282122/import-modules-in-jupyter-notebook-path/

For example, if we have the directory structure:

analysis.ipynb
/src/configuration.py
/src/configuration_nb.ipynb

How do we access the file configuration.py or the notebook configuration_nb.ipynb in the notebook analysis.ipynb?

The nbimporter module helps us here:

pip install nbimporter

contents of /src/configuration.py:

class Configuration():
    def __init__(self):
        print('hello from configuration.py')

contents of analysis.ipynb::

import nbimporter
from src import configuration

new = configuration.Configuration()

if we run this notebook, the output is:

hello from configuration.py

We can also import and use modules from other notebooks. If you have configuration_nb.ipynb in the /src module:

contents of src/configuration_nb.ipynb:

class Configuration_nb():
    def __init__(self):
        print('hello from configuration notebook')

contents of analysis.ipynb:

import nbimporter
from src import configuration_nb

new = configuration_nb.Configuration_nb()

if we run this notebook, the output is:

Importing Jupyter notebook from ......\src\configuration_nb.ipynb
hello from configuration notebook

2 thoughts on “Relative imports in Jupyter notebooks”

  1. I am able to successfully import other jupyter notebooks using nbimporter if they are within the same directory but am not able to do so for any other relative paths. Is there any way to get around this for potential jupyter notebooks in different paths?
    Thanks for the help

    1. Sorry for the late reply. One solution is to use sys. Append the current directory to your path. Then access a notebook in a relative directory. e.g.
      import sys
      sys.path.append(‘..’)

      from src.configuration import Config

Leave a Reply

Your email address will not be published. Required fields are marked *