sys.path different in Jupyter and Python - how to import own modules in Jupyter?

后端 未结 5 1705
一向
一向 2020-11-30 01:29

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

相关标签:
5条回答
  • 2020-11-30 02:05

    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/

    0 讨论(0)
  • 2020-11-30 02:15

    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
    
    0 讨论(0)
  • 2020-11-30 02:15

    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
    
    0 讨论(0)
  • 2020-11-30 02:17

    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
    
    0 讨论(0)
  • 2020-11-30 02:17

    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
    
    0 讨论(0)
提交回复
热议问题