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

ulf*_*ulf 47 python pythonpath jupyter

在Jupyter我没有加载我自己的小模块但是在python/bpython中一切都很好.打字时

import sys
print(sys.path)
Run Code Online (Sandbox Code Playgroud)

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

我在用:

  1. .bashrc中的PYTHONPATH包含我的模块,
  2. Jupyter和bpython在virtualenv里面.

最相似的问题是这个 无法在jupyter笔记本中导入模块; 错误的sys.path

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

Dog*_*kan 37

以下是我在jupyter笔记本中的项目,

import sys
sys.path.append("../") # go to parent dir
from customFunctions import *
Run Code Online (Sandbox Code Playgroud)

然后,为了影响变化customFunctions.py,

%load_ext autoreload
%autoreload 2
Run Code Online (Sandbox Code Playgroud)

  • 您真的要使用`append`吗?我建议最好先装点。例如`sys.path.insert(0,“ ..”)`。如果要在路径前添加“ ..”,则将首先搜索父目录,这无疑是您应该执行的操作。此外,这与Jupyter笔记本修改路径的方式一致-将当前笔记本目录的路径作为路径的第一项。 (2认同)

N. *_* P. 13

Jupyter有自己的PATH变量JUPYTER_PATH.

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

export JUPYTER_PATH=<directory_for_your_module>:$JUPYTER_PATH
Run Code Online (Sandbox Code Playgroud)

  • 我过去曾尝试过几次,不记得它曾经工作过。这绝对不是正确的解决方案。 (4认同)

小智 7

Jupyter基于ipython,永久解决方案可能是更改ipython config选项。

创建一个配置文件

$ ipython profile create
$ ipython locate
/Users/username/.ipython
Run Code Online (Sandbox Code Playgroud)

编辑配置文件

$ cd /Users/username/.ipython
$ vi profile_default/ipython_config.py
Run Code Online (Sandbox Code Playgroud)

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

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

在jupyter启动时,将执行上一行

在这里您可以找到有关ipython配置的更多详细信息https://www.lucypark.kr/blog/2013/02/10/when-python-imports-and-ipython-does-not/


kla*_*hin 5

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

/app
  /mypackage
    mymodule.py
  /notebooks
    notebook.ipynb
Run Code Online (Sandbox Code Playgroud)

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

/app
  /profile_default
    ipython_config.py
Run Code Online (Sandbox Code Playgroud)

内容ipython_config.py

c.InteractiveShellApp.exec_lines = [
    'import sys; sys.path.append("/app")'
]
Run Code Online (Sandbox Code Playgroud)

打开笔记本查看一下:

print(sys.path)
Run Code Online (Sandbox Code Playgroud)

['', '/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
Run Code Online (Sandbox Code Playgroud)