设置Notebook的默认sys.path

时间:2016-07-07 03:51:18

标签: python jupyter-notebook sys.path

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

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

sys.path.append置于每个笔记本之上似乎很麻烦,我希望有一种方法可以添加默认查找路径,就像我们将PYTHONPATH添加到.bash_profile一样。

现在我执行以下操作:

import sys
sys.path.append("<path where DeriveFinalResultSet.py exists>)
import DeriveFinalResultSet as drs

我希望有一个设置,我可以在下面进行操作:

import DeriveFinalResultSet as drs

3 个答案:

答案 0 :(得分:8)

为了避免“隐藏配置”(即不在源代码控制/特定于机器中的东西)并保持笔记本/代码分离(如您所述),我执行以下操作:

code/
    mymodule.py
    mypackage/
        __init__.py

notebooks/
    mynb.ipynb
    mynb2.ipynb
    paths.py   <--- below

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

然后在mynb*.ipynb我很乐意做到:

import paths
import mymodule, mypackage

等。

后一种形式有效地替换了从空字符串(当前目录)到“代码”目录的导入路径,这可能更清晰一些。这使得导入对使用os.chdir()等内容不敏感。

答案 1 :(得分:2)

我编写了简单的bash脚本来更新路径并启动Jupyter:

#!/usr/bin/env bash

echo "Saving PYTHONPATH"
ORIGINAL_PYTHONPATH=$PYTHONPATH
echo "Prepending package to PYTHONPATH"
export PYTHONPATH="$PWD/:$ORIGINAL_PYTHONPATH"
echo "Starting Jupyter"
jupyter notebook
echo "Reverting to the original PYTHONPATH"
export PYTHONPATH=$ORIGINAL_PYTHONPATH

答案 2 :(得分:0)

经过一些研究后,我意识到在PYTHONPATH中改变.bash_profile应该可以解决问题。

以下是我添加到.bash_profile

的两行
PYTHONPATH="<path where DeriveFinalResultSet.py exists>:$PYTHONPATH"
export PYTHONPATH

为了验证,我在打开一个新的IPython Notebook之后做了以下事情。

import sys
print(sys.path)
['', '**<path where DeriveFinalResultSet.py exists>**', '<some path>Google Drive/Project/AnimalPhotoBias/Notebooks', '<some path>anaconda/lib/python35.zip', '<some path>anaconda/lib/python3.5', '<some path>anaconda/lib/python3.5/plat-darwin', '<some path>anaconda/lib/python3.5/lib-dynload', '<some path>anaconda/lib/python3.5/site-packages/Sphinx-1.3.5-py3.5.egg', '<some path>anaconda/lib/python3.5/site-packages/setuptools-20.3-py3.5.egg', '<some path>anaconda/lib/python3.5/site-packages', '<some path>anaconda/lib/python3.5/site-packages/aeosa', '<some path>anaconda/lib/python3.5/site-packages/IPython/extensions', '<some path>.ipython']