为IPython Notebook设置默认的sys.path

Sre*_*non 8 python sys.path jupyter-notebook

我将所有.py文件放在文件夹脚本中,将所有IPython笔记本放在名为Notebook的文件夹下.

脚本上的一个或多个文件上的每个笔记本文件都有多个交叉依赖项.

sys.path.append在每个笔记本的顶部看起来繁琐,我希望有加,就像我们添加一个默认查找路径的方式PYTHONPATH.bash_profile.

现在我做以下事情:

import sys
sys.path.append("<path where DeriveFinalResultSet.py exists>)
import DeriveFinalResultSet as drs
Run Code Online (Sandbox Code Playgroud)

我希望有一个设置,我可以在下面做:

import DeriveFinalResultSet as drs
Run Code Online (Sandbox Code Playgroud)

Nic*_*k T 8

为了避免"隐性配置"(即东西不是在源代码管理/机专用),并保持笔记本/代码分离像你描述的,我像做以下:

code/
    mymodule.py
    mypackage/
        __init__.py

notebooks/
    mynb.ipynb
    mynb2.ipynb
    paths.py   <--- below
Run Code Online (Sandbox Code Playgroud)

paths.py:

import sys
import pathlib
sys.path.insert(0, str(pathlib.Path(__file__).parents[1] / 'code'))
# sys.path[0] = str(pathlib.Path(__file__).parents[1] / 'code')
Run Code Online (Sandbox Code Playgroud)

然后在mynb*.ipynb我可以愉快地做:

import paths
import mymodule, mypackage
Run Code Online (Sandbox Code Playgroud)

后一种形式有效地替换了从空字符串(当前目录)到"代码"目录的导入路径,这可能有点清晰.这使得导入对使用类似的东西不敏感os.chdir().