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 to my module will not in show in Jupyter but in python/bpython it is still there.
I am using:
The most similar questions is this Cannot import modules in jupyter notebook; wrong sys.path
How to configure Jupyter to load my modules automagically?
This question is related to
python
jupyter
pythonpath
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
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
The verified solution doesn't work for me, since my notebook is not in my sys.path. This works however;
import os,sys
sys.path.insert(1, os.path.join(os.getcwd() , '..'))
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
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
Source: Stackoverflow.com