如何在VSCode中设置远程Jupyter Notebook的工作目录?
远程Jupyter .ipynb笔记本能否设置工作目录?
这个问题和《如何在VSCode中设置Jupyter的运行文件路径?》类似,但该问题的解决方案仅适用于本地Jupyter实例,对远程实例无效。
当从VSCode连接到远程服务器和内核时,远程Jupyter会话启动时所在的目录会被当作工作目录。比如在/home/foouser/src/下启动笔记本实例,各项目文件夹内的相对导入就无法正常工作。例如project2中的main.ipynb执行from library import resource时,会出现ModuleNotFoundError。
目录结构
. └── /home/foouser/src/ ├── project1/ │ └── main.ipynb ├── project2/ │ ├── library/ │ │ └── resorce.py │ └── main.ipynb └── project3/ ├── ham/ │ └── spam.py └── main.ipynb
我的环境
- Mac OS上运行的VSCode 1.84.2
- 树莓派(Debian Bookworm)上运行的Jupyter Lab 4.0.9
- 树莓派上的Python 3.11
- VSCode Jupyter扩展v2023.10.1100000000
复现步骤
- 在树莓派的
/home/foouser/src/目录下启动Jupyter:$ jupyter lab --ip=192.168.1.99 --no-browser - 通过SSH从VSCode连接到树莓派
- 浏览并打开
/home/foouser/src/project3/main.ipynb文件 - 在VSCode中粘贴Jupyter服务器URI,设置远程内核
- 运行包含相对导入
from ham import spam的代码单元,出现ModuleNotFoundError
已尝试的方法
- 在
/home/foouser/src/project2目录下启动笔记本实例:此方法解决了project2的相对导入问题,但无法同时处理project1或project3——必须在每个项目目录启动多个Jupyter实例,或者停掉一个再启动另一个。而远程主机是资源有限的树莓派,这种方式会导致系统运行缓慢,非常不适用。 - 在
.vscode/settings.json中设置"jupyter.notebookFileRoot": "${fileDirname}":看似可行,但多次尝试后发现无效,相关说明指出该变量仅适用于本地实例。 - 创建Python辅助函数检测工作目录(编辑:此方法不可靠):这是个临时的拙劣方案,曾生效但后续可能出问题。
dir_helper.py代码:
然后运行以下代码单元:import os def get_local_folder(): return os.path.dirname(os.path.realpath(__file__))from dir_helper import get_local_folder import os os.chdir(get_local_folder())
内容的提问来源于stack exchange,提问作者Aaron Ciuffo
相关产品推荐
相关产品推荐

