VS Code远程Jupyter服务器无法修改Notebook文件根目录求助
远程Jupyter Notebook工作目录不随文件路径切换的解决办法
问题场景
用VS Code通过SSH连接远程Jupyter服务器运行Notebook,目录结构如下:
workingDir/notebook_1.ipynb workingDir/subDir/notebook_2.ipynb
按搜索到的方案设置"jupyter.notebookFileRoot": "${fileDirName}"后完全无效,所有Notebook执行os.getcwd()都返回仓库根目录workingDir。但本地Jupyter和浏览器端Jupyter Lab里,每个Notebook的工作目录都是自身所在文件夹,完全符合预期,问题只出在VS Code连接远程Jupyter的场景。
解决方法
1. 确认配置是远程工作区级别
VS Code的设置分本地用户、远程工作区等多个级别,一定要把jupyter.notebookFileRoot设置在远程工作区的配置里:
- 打开VS Code设置(快捷键
Ctrl+,),切换到"工作区"标签页 - 搜索
jupyter.notebookFileRoot,输入${fileDirName}后保存
2. 修改远程Jupyter服务器的配置
远程Jupyter服务器可能被固定了工作目录,需要调整配置允许动态切换:
- 找到远程服务器上的Jupyter配置文件,一般在
~/.jupyter/jupyter_notebook_config.py(如果没生成过,先执行jupyter notebook --generate-config生成) - 找到或添加以下配置:
# 允许动态设置工作目录 c.NotebookApp.notebook_dir = '' # 确保跨域访问正常(VS Code连接需要) c.NotebookApp.allow_origin = '*' - 重启远程Jupyter服务器
3. 手动在Notebook中切换目录
如果上面的方法都不管用,直接在每个Notebook开头加一段代码强制切换到当前文件所在目录:
import os from pathlib import Path # 利用VS Code注入的变量获取当前Notebook路径 notebook_path = Path(globals()['__vsc_ipynb_file__']) os.chdir(notebook_path.parent) # 验证是否生效 print(os.getcwd())
这段代码通过VS Code自动注入的__vsc_ipynb_file__变量拿到当前Notebook的完整路径,然后切换到它的父目录,简单直接。
4. 更新VS Code和插件
老版本的VS Code、Python插件或者Jupyter插件可能存在远程环境的兼容bug,把这些都更到最新版本再试试。
内容的提问来源于stack exchange,提问作者L.W.
相关产品推荐
相关产品推荐

