jupyter notebook 的当前工作目录设置为 vscode 中的临时文件夹

MjH*_*MjH 5 python visual-studio-code jupyter-notebook

我正在尝试将当前工作目录 (CWD) 设置为 VS Code 中 Jupyter Notebook 的已编辑文件位置。我${fileDirname}python.dataScience.notebookFileRoot设置中使用。但是它使用临时文件夹${fileDirname}而不是原始文件夹。

同样的问题已经讨论了几次(例如/sf/answers/3835648351/)并指出了尝试过的解决方案。

以下是 cwd 的示例:

os.getcwd()
.. 'C:\\Users\\MjH\\AppData\\Local\\Temp\\1f6cc207-562f-4ae1-8754-e2013ae2c12d'
Run Code Online (Sandbox Code Playgroud)

而预期的结果是 C:\Workspace\Project。

所以${fileDirname}在我的情况下使用不起作用。我使用以下临时解决方案,显然,如果文件被移动,它不会更新。

import sys
import os
sys.path.insert(0, r'C:\workspace\project')
os.chdir(sys.path[0])
Run Code Online (Sandbox Code Playgroud)

现在我试图理解三件事:

  1. 我的情况是独一无二的吗?
  2. 如果是一般问题,是否有提交给 VS Code 的功能请求/问题来解决它?
  3. 有更好的临时解决方案吗?

VS Code 版本:Code 1.40.2 (f359dd6, 2019-11-25T14:54:45.096Z)
操作系统版本:Windows_NT x64 10.0.17763 设置

Esp*_*azi 15

截至 2021 年 1 月,在我的设置中添加以下行有助于解决问题

"jupyter.notebookFileRoot": "${workspaceFolder}",
Run Code Online (Sandbox Code Playgroud)


Cri*_*oJV 7

我也受到这个问题的影响。这是我解决它的方法。

使用的配置参数${fileDirName}的Python>数据科学:笔记本电脑文件的根,有,因为我可以在我的环境检查这种效果。

如果我使用命令Ctrl+Shift+P > Python:Show Python Interactive Window打开Python 交互式窗口,然后运行:

import os
os.getcwd()
Run Code Online (Sandbox Code Playgroud)

输出是一个随机的时间文件夹。所以我不能做导入导致我的本地相关模块找不到。

但是,如果不是直接打开一个新的 Python 交互式窗口,而是运行我的任何 Python 文件的代码单元格

#%%
print("Some string here")
Run Code Online (Sandbox Code Playgroud)

然后找到当前的工作路径,它fileDirName按预期更改。然后与交互式窗口的任何交互都将正确执行(并且我的下一个导入将正确执行)。

为了避免这种行为并且因为我想在我的工作空间文件夹中执行操作,我将Jupyter: Notebook File Root更改为${workspaceFolder}. 在这种情况下,打开一个新的 Python 交互式窗口,将自动将当前路径设置为工作空间文件夹,无论是否需要执行任何 python 单元格。

我认为,在使用时${fileDirName},最好将当前工作打开的文件夹设置为 Python Interactive Window (Jupyter) 的工作路径,而不是临时随机文件夹(在不执行特定单元格的情况下打开的情况下),但看起来不像那样。

希望有用!

编辑 :

自 2020 年 11 月起,Jupyter 扩展与 VS Code 的 Python 扩展分开。设置键已从 python.data science 重命名为 jupyter