Here is what I do on my projects in jupyter notebook,
import sys
sys.path.append("../") # go to parent dir
from customFunctions import *
Then, to affect changes in customFunctions.py,
%load_ext autoreload
%autoreload 2
Another solution might be to prepend;
e.g. sys.path.insert(0, "..")
. If you were to prepend ".." to your path, then the parent
directory would be searched first, which is arguably what you should want to happen.
Also, this is consistent with how Jupyter notebook modifies the
path -- it puts the path of the current notebook directory as the first item on the path.
Jupyter is base on ipython, a permanent solution could be changing the ipython config options.
Create a config file
$ ipython profile create
$ ipython locate
/Users/username/.ipython
Edit the config file
$ cd /Users/username/.ipython
$ vi profile_default/ipython_config.py
The following lines allow you to add your module path to sys.path
c.InteractiveShellApp.exec_lines = [
'import sys; sys.path.append("/path/to/your/module")'
]
At the jupyter startup the previous line will be executed
Here you can find more details about ipython config https://www.lucypark.kr/blog/2013/02/10/when-python-imports-and-ipython-does-not/
Jupyter has its own PATH variable, JUPYTER_PATH.
Adding this line to the .bashrc file worked for me:
export JUPYTER_PATH=<directory_for_your_module>:$JUPYTER_PATH