In Jupyter my own little module is not loaded but in python/bpython is everything is fine. When typing
import sys
print(sys.path)
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/
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
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
Suppose your project has the following structure and you want to do imports in the notebook.ipynb
:
/app
/mypackage
mymodule.py
/notebooks
notebook.ipynb
If you are running Jupyter inside a docker container without any virtualenv it might be useful to create Jupyter (ipython) config in your project folder:
/app
/profile_default
ipython_config.py
Content of ipython_config.py
:
c.InteractiveShellApp.exec_lines = [
'import sys; sys.path.append("/app")'
]
Open the notebook and check it out:
print(sys.path)
['', '/usr/local/lib/python36.zip', '/usr/local/lib/python3.6', '/usr/local/lib/python3.6/lib-dynload', '/usr/local/lib/python3.6/site-packages', '/usr/local/lib/python3.6/site-packages/IPython/extensions', '/root/.ipython', '/app']
Now you can do imports in your notebook without any sys.path
appending in the cells:
from mypackage.mymodule import myfunc
You can use absolute imports:
/root
/app
/config
config.py
/source
file.ipynb
# In the file.ipynb importing the config.py file
from root.app.config import config