首页 > 解决方案 > 如何将所有 Jupyter Notebooks 的默认工作目录设置为项目的父文件夹

问题描述

问题:如何将在 Jupyter Lab 中通过双击打开的所有笔记本的工作目录设置为项目的文件夹/myproject/,而不考虑该父文件夹中的笔记本子文件夹?!pwd工作目录在 Linux/Mac 或!cdWindows上标识为。

上下文:Jupyter Lab 会话是从项目文件夹启动的,由:/myproject/jupyter lab.

我不是在寻找使用代码(例如使用!cd..或使用os)更改笔记本中的工作目录,而是更改 Jupyter Lab 的设置,以便所有内核都将从启动 Jupyter Lab 的文件夹开始。

这对于能够使用一致的相对文件夹很有用,无论它们是从哪个子文件夹引用的。例如,用于加载特定子文件夹中的数据。

标签: jupyter-notebookipythonjupyterjupyter-lab

解决方案


我同意这通常是首选方法!我总是将我的笔记本配置为这样工作,因为它:

  • 可以很容易地指定数据和输出的路径
  • 允许在目录之间移动笔记本而无需更改路径
  • 让 jupyterlab-lsp 代码智能工作更可靠

我有一个名为 python 的模块make_paths_absolute.py,内容如下:

from os import chdir
from pathlib import Path


def make_paths_relative_to_root():
    """Always use the same, absolute (relative to root) paths

    which makes moving the notebooks around easier.
    """
    top_level = Path(__file__).parent

    chdir(top_level)


make_paths_relative_to_root()

在每个笔记本的第一个单元格中,我添加了一行import make_paths_absolute. 我喜欢这种方式,因为它可以做到:

  • 可重现:复制/克隆我的项目的任何人都可以运行代码,而无需在其 Jupyter 环境中自定义任何内容
  • 使用所有笔记本界面(无论是 JupyterLab/RetroLab/classic Notebook)
  • 对于任何阅读笔记本的人来说,他们应该期望路径是绝对的(=相对于根),这一点非常明显。

要完成这项工作,您首先需要PYTHONPATH在启动 JupyterLab 时设置指向存储库的根目录。要在 Linux/Mac 上执行此操作,您可以在 jupyter lab 命令前面添加:

PYTHONPATH=/path/to/your/lab/root:$PYTHONPATH jupyter lab

PS。以上是我的设置的简化。实际上,我与其他初始化时间代码一起存储make_paths_absolute.pyhelpers包中(所以还有一个空的helpers/__init__.py,还有额外的),包括一个名为的笔记本,其中包含诸如、pandas 自定义(如确保它使用稳定排序)、警告过滤器之类的东西等等所以我的每个笔记本都以:.parentnotebook_setup.ipynb%matplotlib inline

import helpers.make_paths_absolute
%run helpers/notebook_setup.ipynb

而且我真的很喜欢这种设置,两年来没有任何问题。


推荐阅读