Jupyter和Python中的sys.path不同 - 如何在Jupyter中导入自己的模块?

时间:2016-01-24 14:12:54

标签: python jupyter pythonpath

在Jupyter我没有加载我自己的小模块,但在python / bpython中一切都很好。输入时

import sys
print(sys.path)

我的模块的路径不会在Jupyter中显示,但在python / bpython中它仍然存在。

我正在使用:

  1. .bashrc中的PYTHONPATH包含我的模块,
  2. jupyter和bpython在virtualenv中。
  3. 最相似的问题是这个 Cannot import modules in jupyter notebook; wrong sys.path

    如何配置Jupyter自动加载我的模块?

6 个答案:

答案 0 :(得分:27)

以下是我在jupyter笔记本中的项目所做的事情,

import sys
sys.path.append("../") # go to parent dir
from customFunctions import *

然后,影响customFunctions.py

的变化
%load_ext autoreload
%autoreload 2

答案 1 :(得分:13)

Jupyter有自己的PATH变量JUPYTER_PATH。

将此行添加到.bashrc文件中对我有用:

export JUPYTER_PATH=<directory_for_your_module>:$JUPYTER_PATH

答案 2 :(得分:4)

Jupyter基于ipython,永久解决方案可能正在改变ipython配置选项。

创建配置文件

$ ipython profile create
$ ipython locate
/Users/username/.ipython

编辑配置文件

$ cd /Users/username/.ipython
$ vi profile_default/ipython_config.py

以下行允许您将模块路径添加到sys.path

c.InteractiveShellApp.exec_lines = [
    'import sys; sys.path.append("/path/to/your/module")'
]

在jupyter启动时,前一行将被执行

在这里您可以找到有关ipython config https://www.lucypark.kr/blog/2013/02/10/when-python-imports-and-ipython-does-not/

的更多详细信息

答案 3 :(得分:0)

假设您的项目具有以下结构,并且您想在notebook.ipynb中进行导入:

/app
  /mypackage
    mymodule.py
  /notebooks
    notebook.ipynb

如果您在没有任何virtualenv的docker容器中运行Jupyter,则可能有必要在项目文件夹中创建Jupyter(ipython)配置

/app
  /profile_default
    ipython_config.py

ipython_config.py的内容:

c.InteractiveShellApp.exec_lines = [
    'import sys; sys.path.append("/app")'
]

打开笔记本并签出:

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']

现在您可以在笔记本中进行导入,而无需在单元格中附加任何sys.path

from mypackage.mymodule import myfunc

答案 4 :(得分:0)

经过验证的解决方案对我不起作用,因为我的笔记本不在我的 sys.path 中。然而,这有效;

import os,sys
sys.path.insert(1, os.path.join(os.getcwd()  , '..'))

答案 5 :(得分:-1)

您可以使用绝对导入:

/root
    /app
      /config
        config.py
      /source
        file.ipynb

# In the file.ipynb importing the config.py file
from root.app.config import config