Jupyter Notebook 怎么配置多个工作目录?先分清根目录、运行目录和 Notebook 位置

山间有风
山间有风
发布时间:2026-08-25| 120人浏览过
原创

前言

很多人想在 Jupyter 里一次配好“多个工作目录”,但真正踩坑的往往不是配置项太少,而是没有分清服务根目录、Kernel 当前目录和 Notebook 文件位置。本文把这三层关系拆开讲,再对应给出多实例启动、会话内切换和 VS Code 远程自动对齐三种做法,方便你按场景选方案。

很多人想在 Jupyter 里一次性配置“多个工作目录”,结果越改越乱,最后问题往往不在配置文件,而在路径概念本身。本文先说明 Jupyter 为什么不能直接设置多个默认目录,再分别给出多实例启动、单会话切换目录和 VS Code 远程自动对齐路径的做法,帮助你判断哪种方案最适合自己的使用场景。

Jupyter 为何不能直接配置多个默认工作目录

先说结论:Jupyter 本身并不支持“多个默认工作目录”。在 jupyter_notebook_config.py 中,c.NotebookApp.notebook_dir 只能设置一个路径,Notebook 服务启动后也只有一个根目录。

因此,大家常说的“多个工作目录”,本质上通常是两类方案:

  • 在同一台机器上启动多个独立的 Notebook 服务,每个服务对应一个目录和端口。
  • 只启动一个服务,但在 Notebook 运行过程中动态切换当前工作目录。

如果这里不先分清,后面就很容易把“服务根目录”“Kernel 当前目录”“Notebook 文件实际所在位置”混为一谈,进而导致 import、open() 或相对路径读取数据时频繁报错。

用 --notebook-dir 启动多个独立服务

如果你需要同时维护多个项目,而且希望彼此文件树、入口路径和运行环境尽量互不干扰,多开 Notebook 服务是最直接的办法。

用多个 Notebook 服务实例分别对应不同项目目录的专栏配图
多实例方式管理不同项目目录把“多个目录”拆成多个独立服务,是 Jupyter 中最清晰也最稳定的做法。

做法很简单:打开两个命令行窗口,分别指定不同目录和不同端口启动。

jupyter notebook --notebook-dir="D:project_a" --port=8888
jupyter 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,只是临时要访问别的项目子目录、加载数据文件,或者测试另一套模块路径,那么没有必要专门再开一个服务。此时更合适的做法,是直接切换当前 Kernel 的工作目录。

最简单的方式是使用魔法命令:

%cd ../other_project
%cd D:dataraw

也可以用 Python 标准库:

import os; os.chdir(r'D:modelsexp_v2')

切换后,可以立刻验证当前目录是否已经生效:

!pwd

在 Linux/macOS 下常用 !pwd,Windows 下则可以用:

!cd

不过,这种方式有一个经常被忽略的限制:Kernel 一旦重启,当前目录会恢复为服务启动时的 notebook_dir,而不是你上一次通过 %cd 切换后的路径。

这也是为什么有些人明明刚刚还能读到文件,重启内核后又突然报路径错误。问题不一定出在代码本身,而是当前工作目录已经回退了。

另外,如果你的 Notebook 中大量使用相对路径导入模块,通常更稳妥的做法是始终先 %cd 到该 Notebook 所在目录,再去执行导入或读取操作。这样能有效避免因为运行目录错位而触发 ModuleNotFoundError。

VS Code 远程连接时,让内核自动切到当前 .ipynb 目录

很多路径问题在 VS Code 远程开发场景里更明显:你本地打开的是 project2/main.ipynb,但远程内核实际运行目录却在 /home/user/src。Notebook 文件位置和内核当前目录一旦错位,代码里依赖相对路径的部分就容易出问题。

这种情况下,可以在 VS Code 的 settings.json 中加入启动命令,让每次连接内核时都自动切换到当前 .ipynb 所在目录:

"jupyter.runStartupCommands": ["import os; os.chdir(os.path.dirname(__vsc_ipynb_file__))"]

这里的 __vsc_ipynb_file__ 是 VS Code 注入的变量,值就是当前打开的 .ipynb 绝对路径。这样做之后,每次内核连接时都会自动执行一次目录切换,使 os.getcwd() 与 Notebook 文件所在目录保持一致。

这个方案的优点也很明确:它不依赖服务端去改 Jupyter 配置,对远程服务器基本是零侵入,更适合多人共用环境或不方便调整服务启动参数的场景。

真正要盯住的是三层路径关系

很多人以为自己遇到的是“Jupyter 怎么配置多个工作目录”的问题,实际上更关键的是没有把下面三层路径区分开:

单个 Notebook 会话中切换工作目录与三层路径关系的专栏配图
Jupyter 路径问题的核心判断法真正决定代码能否正常导入和读写文件的,是服务目录、Kernel 当前目录与 Notebook。
  • 服务启动目录
  • Kernel 当前目录
  • Notebook 文件物理位置

这三者一旦不一致,import 和 open() 就容易出现行为偏差:模块导入失败、数据文件找不到、相对路径指向错误目录,都是常见结果。

所以,与其反复改配置,不如先确认当前实际运行位置。最直接的判断方式,往往就是查看 os.getcwd() 的输出。只要先把路径关系理顺,再决定应该多开服务、临时 %cd,还是交给 VS Code 自动处理,问题就会清楚很多。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。