繁体   English   中英

无法在 VSCode 中运行 Jupyter Notebook - Vanilla Python、Windows 10

[英]Can't run Jupyter Notebook in VSCode - Vanilla Python, Windows 10

我的 Windows 10 计算机上安装了现有的香草 Python,我不想重新安装 Anaconda。

尝试在 vscode 中运行 ipynb 文件中的代码时,出现以下错误:

Error: Jupyter cannot be started. Error attempting to locate jupyter:
at A.startServer (c:\Users\[username]\.vscode\extensions\ms-python.python-2020.2.64397\out\client\extension.js:1:786120)
at async A.ensureServerAndNotebookImpl (c:\Users\[username]\.vscode\extensions\ms-python.python-2020.2.64397\out\client\extension.js:1:785575)
at async A.ensureServerAndNotebook (c:\Users\[username]\.vscode\extensions\ms-python.python-2020.2.64397\out\client\extension.js:1:785376)
at async A.submitCode (c:\Users\[username]\.vscode\extensions\ms-python.python-2020.2.64397\out\client\extension.js:1:782328)
at async A.reexecuteCell (c:\Users\[username]\.vscode\extensions\ms-python.python-2020.2.64397\out\client\extension.js:75:879318)

还有来自 VSCode 的以下错误: 在此处输入图像描述


以下是我尝试过的一些事情:

检查 VSCode 扩展是否正确安装

“Jupyter”扩展已被弃用。 我安装了 Microsoft 的“Python”插件,其中包含 Jupiter Notebook 支持。

Jupyter 安装正确

我尝试重新安装 jupyter:

> python -m pip install --upgrade pip
> pip install jupyter
> pip install notebook

试图在终端/命令行上运行 Jupyter

> jupyter notebook    //didn't work
jupyter : The term 'jupyter' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or   
if a path was included, verify that the path is correct and try again.
At line:1 char:1
+ jupyter
+ ~~~~~~~
+ CategoryInfo          : ObjectNotFound: (jupyter:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException

这给出了一个错误,无法找到 jupyter 可执行文件。 根据这篇文章,我尝试了以下方法并且成功了:

> python -m notebook

检查是否指向正确的解释器

根据这篇文章,我尝试过:

  1. 按 Command+Shift+P 打开一个新的命令调色板
  2. 输入 >Python: Select Intepreter 启动 jupyter notebook 服务器

但是我的电脑上只安装了一个版本的 Python,这样做并没有什么不同。

检查路径

这篇文章中有关于PYTHONPATH的评论,但由于正确引用了 python 目录并且python工作,因此我没有进一步调查它。

需要注意的一点是pip安装到我的"C:/Users/[username]/appdata/Roaming/Python-38/"文件夹中,而我的 Python 安装在"C:\Program Files\Python38-32\"中。

如果您有类似的问题,请尝试问题中提到的上述步骤。

阅读这篇文章后,我意识到我必须 map 安装了 pip 的脚本,即使它在我的漫游目录中。 https://discuss.python.org/t/windows-appdata-roaming-vs-local/2682 一个让我花费了这么多小时的困惑。

添加变量的步骤如下:

  1. Go 到环境变量(如果你不知道怎么做,这里有一些说明: https://www.techjunkie.com/environment-variables-windows-10/
  2. 在“[用户名] 的用户变量”部分中,编辑“PATH”变量。 (它不能是系统变量部分,因为只有您可以访问自己的漫游文件夹)
  3. 添加“C:\Users[username]\AppData\Roaming\Python\Python38\Scripts”(或 pip 将脚本安装到 PATH 变量的位置。

最后重新启动 VSCode 以获取要为 VSCode 更新的新环境变量。 现在运行 ipynb 文件中的脚本,它应该可以工作了。 它也可能抱怨它需要其他模块,在这种情况下你可以使用'pip'来安装它。

注意:如果您不受计算机上现有 python 版本的限制并且不想安装更多版本,您也可以使用 Python Anaconda 分发版。 https://www.anaconda.com/distribution/

注意:如果您希望 jupyter note 对使用您的计算机的所有用户工作,您需要配置 pip 以将安装下载到不在“C:\Users[username]”文件夹中的目录,并向其中添加系统变量.

对我来说,另一种解决方案有所帮助。 我不太确定,虽然是什么问题,但不知何故,为确切的工作空间存储的 state 导致 Python 扩展崩溃。 VSCode 将所有工作区的状态存储在/Code/User/workspaceStorage/下的全局配置文件夹中。 请参阅此帮助段落中针对您的操作系统的settings.json的路径,然后只需替换路径的末尾即可。 以 Windows 为例,设置路径为%APPDATA%\Code\User\settings.json ,所以 state 存储为

%APPDATA%/Code/User/workspaceStorage/

在这个目录中,有很多子目录,有一些十六进制名称,很难与工作区相关联。 找出工作区的 id

  1. 在 VSCode 中打开它
  2. 帮助 → 切换开发者工具
  3. 在控制台选项卡中,执行以下操作以获取工作区 ID:
vscode.context.configuration()["workspace"]["id"]

然后您可以通过工作区的 id 删除 workspaceStorage 子文件夹。

另一种方法是使用workspaceStorage 文件夹内容本身。 每个文件夹都包含一个工作区。json 通常包括工作区的路径。 所以我写了一个小 python 脚本来帮助我浏览它们。 在脚本的末尾,有一个关于删除远程容器的所有工作区的草案。 随意根据您的需要进行修改。

from glob import glob
import os, json, sys
from shutil import rmtree

if sys.platform.startswith("win32"): path = os.environ["APPDATA"] + '/Code/User/workspaceStorage/' # Windows
elif sys.platform.startswith("darwin"): path = os.environ["HOME"] + '/Library/Application Support/Code/User/workspaceStorage/' # Mac OS
elif sys.platform.startswith("linux"): path = os.environ["HOME"] + '/.config/Code/User/workspaceStorage/' # Linux

for f in glob(path + "*/*.json"):
    with open(f) as fr:
        ws = json.load(fr)
    d = ""
    if "folder" in ws.keys():
        d = ws["folder"]
    elif "workspace" in ws.keys():
        d = ws["workspace"]
    elif "configuration" in ws.keys():
        d = ws["configuration"]["fsPath"]
    ws_path = os.path.dirname(f)
    print(d, ws_path)
    if d.startswith("vscode-remote://attached-container") or d.startswith("vscode-remote://dev-container"):
        print("Inside a container")
        # rmtree(ws_path)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM