是否可以设置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
/home/foouser/src/
中的树莓派上启动 Jupyter - $ jupyter lab --ip=192.168.1.99 --no-browser
.ipynb
中的 /home/foouser/src/project3/main.ipynb
文件并打开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())
不太确定,但听起来您想要类似于此功能请求问题票中所要求的内容:相对路径不适用于远程内核#8771。我建议您对该问题票竖起大拇指以表示支持。您还可以订阅它以获取有关讨论和进展的通知。请避免在那里发表嘈杂的评论,比如只包含“+1”/“bump”的评论。
有一个解决方法,由 Anar Z. Yusifov 发布(将其放入您的 settings.json 文件):
"jupyter.runStartupCommands": [ "import os", "__t=os.path.dirname(__vsc_ipynb_file__)", "%cd {__t}", "del __t" ],