如何在VSCode中设置远程jupyter笔记本的文件路径?

问题描述 投票:0回答:1

是否可以设置remote Jupyter

.ipynb
笔记本的工作目录?这个问题类似于 How to set the running file path of jupyter in VScode?,但该问题提供的解决方案看起来适用于 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
  • 在 Raspberry Pi OS (Debian Bookworm) 上运行的 Jupyter Lab 4.0.9
  • 在 Pi 上运行的 Python 3.11
  • VSCode Jupyter 扩展 v2023.10.1100000000

重现步骤

  1. /home/foouser/src/
    中的树莓派上启动 Jupyter -
    $ jupyter lab --ip=192.168.1.99 --no-browser
  2. 通过 SSH 从 VS Code 连接到树莓派
  3. 浏览到
    .ipynb
    中的
    /home/foouser/src/project3/main.ipynb
    文件并打开
  4. 将 Jupyter 服务器的 URI 粘贴到 VSCode 中,将内核设置为远程内核
  5. 尝试使用相对导入来运行单元格
    from ham import spam
    --> 结果为
    ModuleNotFoundError

我尝试过的事情

/home/foouser/src/project2

启动笔记本实例

这解决了项目 2 中的相对导入问题,但使项目 1 或项目 3 上的工作变得非常困难。我必须在每个项目目录中启动多个 jupyter 实例,或者停止一个实例并启动另一个实例。这一点都不理想,因为远程主机是资源有限的树莓派;一切都戛然而止。

"jupyter.notebookFileRoot": "${fileDirname}"
 中设置 .vscode/settings.json

这个解决方案看起来很诱人,但经过一番折腾后,看来这可能是一个转移注意力的事情。我发现 this comment 指出该变量仅适用于 local 实例。

在Python文件中创建一个辅助函数来检测工作目录

编辑:这工作不可靠

这是一个fugly hack,但它确实有效。我确信这稍后会咬我屁股。

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())
python visual-studio-code jupyter-notebook jupyter
1个回答
0
投票

不太确定,但听起来您想要类似于此功能请求问题票中所要求的内容:相对路径不适用于远程内核#8771。我建议您对该问题票竖起大拇指以表示支持。您还可以订阅它以获取有关讨论和进展的通知。请避免在那里发表嘈杂的评论,比如只包含“+1”/“bump”的评论。

有一个解决方法,由 Anar Z. Yusifov 发布(将其放入您的 settings.json 文件):

"jupyter.runStartupCommands": [
    "import os",
    "__t=os.path.dirname(__vsc_ipynb_file__)",
    "%cd {__t}",
    "del __t"
],
© www.soinside.com 2019 - 2024. All rights reserved.