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:

For example, if we have the directory structure:


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

The nbimporter module helps us here:

pip install nbimporter

contents of /src/

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

contents of analysis.ipynb::

import nbimporter
from src import configuration

new = configuration.Configuration()

if we run this notebook, the output is:

hello from

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

      from src.configuration import Config

Leave a Reply

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