jupyter-notebook - 如何将所有 Jupyter Notebooks 的默认工作目录设置为项目的父文件夹
问题描述
问题:如何将在 Jupyter Lab 中通过双击打开的所有笔记本的工作目录设置为项目的文件夹/myproject/
,而不考虑该父文件夹中的笔记本子文件夹?!pwd
工作目录在 Linux/Mac 或!cd
Windows上标识为。
上下文:Jupyter Lab 会话是从项目文件夹启动的,由:/myproject/jupyter lab
.
我不是在寻找使用代码(例如使用!cd..
或使用os
)更改笔记本中的工作目录,而是更改 Jupyter Lab 的设置,以便所有内核都将从启动 Jupyter 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.py
在helpers
包中(所以还有一个空的helpers/__init__.py
,还有额外的),包括一个名为的笔记本,其中包含诸如、pandas 自定义(如确保它使用稳定排序)、警告过滤器之类的东西等等所以我的每个笔记本都以:.parent
notebook_setup.ipynb
%matplotlib inline
import helpers.make_paths_absolute
%run helpers/notebook_setup.ipynb
而且我真的很喜欢这种设置,两年来没有任何问题。
推荐阅读
- html - 子资源完整性:如何仅显示警告而不显示阻止资源?
- python - 如何在 json 对象数组中获取特定值并保存到 var
- c - 可以使用scanf阅读文本吗?
- kernel - 为什么我的终端无法读取 rpm 之类的命令?
- java - Maven 无法解决 kafka 依赖
- ruby-on-rails - Elastic Beanstalk:找不到带有可执行包 (Gem::GemNotFoundException) 的 gem bundler (>= 0.a)
- r - 如何在 pspline::smooth.Pspline R 中添加权重,相当于 MATLAB 的 csaps()
- android-studio - 未自动检测到模拟器无法连接到设备
- python - 没有名为“cv2.cv2”的模块
- sql - 为什么我在运行访问查询时收到“函数参数无效”和“输入参数值”?