Jupyter不支持多个默认工作目录,c.NotebookApp.notebook_dir仅允许设一个路径;所谓“多个目录”实为通过多服务实例(--notebook-dir+不同端口)或单服务内动态切换(%cd/os.chdir)实现。

Jupyter 本身不支持“多个默认工作目录”
这是最常被误解的一点:jupyter_notebook_config.py 中的 c.NotebookApp.notebook_dir 只能设一个路径,启动时 Notebook 服务只有一个根目录。所谓“多个工作目录”,实际是通过不同方式在**同一服务下切换视图范围**,或**启动多个独立服务实例**实现的。
用 --notebook-dir 启动多个独立服务
适合并行开发多个项目,互不干扰,每个服务有自己的文件树和端口。
- 打开两个命令行窗口,分别运行:
jupyter notebook --notebook-dir="D:\project_a" --port=8888jupyter notebook --notebook-dir="E:\project_b" --port=8889- 浏览器访问
http://localhost:8888和http://localhost:8889就是两个完全隔离的 Notebook 环境 - 注意:端口不能重复,否则第二个会报错
Port 8888 is already in use - Windows 下可把命令存成
start_a.bat和start_b.bat,双击即启
在单个 Notebook 内动态切换当前工作目录
适用于已打开 Notebook、需临时访问其他项目子目录(如加载数据、导入模块),但不改变服务根目录。
- 用魔法命令最简单:
%cd ../other_project或%cd D:\data\raw - 用 Python 标准库也行:
import os; os.chdir(r'D:\models\exp_v2') - 验证是否生效:
!pwd(Linux/macOS)或!cd(Windows) - ⚠️ 注意:Kernel 重启后恢复为服务启动时的
notebook_dir,不是你上次%cd的位置 - 如果 Notebook 里大量用相对路径导入模块,建议始终
%cd到该 Notebook 所在目录,避免ModuleNotFoundError
VS Code 远程连接时自动切到当前 .ipynb 目录
本地打开 project2/main.ipynb,远程内核却在 /home/user/src 下运行——这是路径错位的典型场景。
- 在 VS Code 的
settings.json中添加: "jupyter.runStartupCommands": ["import os; os.chdir(os.path.dirname(__vsc_ipynb_file__))"]- 这个
__vsc_ipynb_file__是 VS Code 注入的变量,值为当前打开的 .ipynb 绝对路径 - 每次连接内核时自动执行,确保
os.getcwd()与 Notebook 文件所在目录一致 - 不依赖服务端配置,对远程服务器零侵入
真正麻烦的不是“怎么设多个目录”,而是没意识到 Jupyter 的工作目录分三层:服务启动目录、Kernel 当前目录、Notebook 文件物理位置——三者不一致时,import 和 open() 就容易出错。盯住 os.getcwd() 输出,比反复改配置更管用。


















